Browse Source

Teport can display SubString with FieldReference like =Substring(Fields!ProductName,0,3)

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
c993b477ff
  1. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseDataItem.cs
  2. 53
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  3. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/GroupTableFixture.cs
  4. 30
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs
  5. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableStrategyFixture.cs
  6. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/SubstringFixture.cs

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseDataItem.cs

@ -71,7 +71,6 @@ namespace ICSharpCode.Reports.Core
public override void Render(ReportPageEventArgs rpea) public override void Render(ReportPageEventArgs rpea)
{ {
// string toPrint = CheckForNullValue();
base.Text = StandardFormatter.FormatOutput(DBValue, this.FormatString, base.DataType, this.NullValue); base.Text = StandardFormatter.FormatOutput(DBValue, this.FormatString, base.DataType, this.NullValue);
base.Render(rpea); base.Render(rpea);
} }
@ -87,7 +86,6 @@ namespace ICSharpCode.Reports.Core
[Browsable(false)] [Browsable(false)]
public virtual string DBValue {get;set;} public virtual string DBValue {get;set;}
public virtual string ColumnName { public virtual string ColumnName {
get { get {
return columnName; return columnName;

53
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -7,7 +7,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core namespace ICSharpCode.Reports.Core
{ {
/// <summary> /// <summary>
@ -16,6 +16,7 @@ namespace ICSharpCode.Reports.Core
internal class TableStrategy: BaseListStrategy,IEnumerable<BaseComparer> internal class TableStrategy: BaseListStrategy,IEnumerable<BaseComparer>
{ {
private DataTable table; private DataTable table;
private IExpressionEvaluatorFacade expressionEvaluator;
public TableStrategy(DataTable table,ReportSettings reportSettings):base(reportSettings) public TableStrategy(DataTable table,ReportSettings reportSettings):base(reportSettings)
{ {
@ -23,6 +24,7 @@ namespace ICSharpCode.Reports.Core
throw new ArgumentNullException("table"); throw new ArgumentNullException("table");
} }
this.table = table; this.table = table;
expressionEvaluator = new ExpressionEvaluatorFacade (null);
} }
#region Methods #region Methods
@ -64,28 +66,49 @@ namespace ICSharpCode.Reports.Core
void FillInternal (DataRow row,IDataItem item) void FillInternal (DataRow row,IDataItem item)
{ {
BaseImageItem bi = item as BaseImageItem; if (item != null)
if (bi != null) { {
using (System.IO.MemoryStream memStream = new System.IO.MemoryStream()){ BaseImageItem bi = item as BaseImageItem;
Byte[] val = row[bi.ColumnName] as Byte[]; if (bi != null) {
if (val != null) { using (System.IO.MemoryStream memStream = new System.IO.MemoryStream()){
if ((val[78] == 66) && (val[79] == 77)){ Byte[] val = row[bi.ColumnName] as Byte[];
memStream.Write(val, 78, val.Length - 78); if (val != null) {
} else { if ((val[78] == 66) && (val[79] == 77)){
memStream.Write(val, 0, val.Length); memStream.Write(val, 78, val.Length - 78);
} else {
memStream.Write(val, 0, val.Length);
}
System.Drawing.Image image = System.Drawing.Image.FromStream(memStream);
bi.Image = image;
} }
System.Drawing.Image image = System.Drawing.Image.FromStream(memStream);
bi.Image = image;
} }
} }
} else { else
if (item != null) { {
item.DBValue = row[item.ColumnName].ToString(); var dataItem = item as BaseDataItem;
if (dataItem != null) {
dataItem.DBValue = ExtractValue(row,dataItem).ToString();
//dataItem.DBValue = row[dataItem.ColumnName].ToString();
}
return; return;
} }
} }
} }
object ExtractValue(DataRow row,BaseDataItem item)
{
var val = row[item.ColumnName];
if (item.Text.StartsWith("=")) {
// string s = expressionEvaluator (
return val;
} else {
return val;
}
return null;
}
public override CurrentItemsCollection FillDataRow(int pos) public override CurrentItemsCollection FillDataRow(int pos)
{ {

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/GroupTableFixture.cs

@ -177,8 +177,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
private IDataNavigator PrepareDateTimeGrouping () private IDataNavigator PrepareDateTimeGrouping ()
{ {
Console.WriteLine("PrepareDateTimeGrouping ()");
GroupColumn gc = new GroupColumn("RandomDate",1,ListSortDirection.Ascending); GroupColumn gc = new GroupColumn("RandomDate",1,ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings(); ReportSettings rs = new ReportSettings();
rs.GroupColumnsCollection.Add(gc); rs.GroupColumnsCollection.Add(gc);

30
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs

@ -139,8 +139,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
DataRow r = dataNav.Current as DataRow; DataRow r = dataNav.Current as DataRow;
string actual = r["last"].ToString(); string actual = r["last"].ToString();
Assert.GreaterOrEqual(compareTo,actual); Assert.GreaterOrEqual(compareTo,actual);
// string ss = String.Format("< {0} > <{1}>",compareTo,actual);
// Console.WriteLine(ss);
compareTo = actual; compareTo = actual;
} }
} }
@ -148,6 +146,34 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
#endregion #endregion
#region Substring
[Test]
public void EnumSubStrings()
{
ReportSettings rs = new ReportSettings();
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,rs);
DataNavigator dataNav = dm.GetNavigator;
BaseDataItem bdi = new BaseDataItem(){
Name ="MyDataItem",
ColumnName = "last",
Text ="=Substring('Sharp',0,3)"
};
var ri = new ReportItemCollection();
ri.Add(bdi);
while (dataNav.MoveNext())
{
dataNav.Fill(ri);
DataRow r = dataNav.Current as DataRow;
string actual = r["first"].ToString();
Console.WriteLine("{0} - {1} - {2}",actual,bdi.DBValue,bdi.Text);
Console.WriteLine("{0} - {1}",actual,actual.Substring(0,2));
}
}
#endregion
#region Standart Enumerator #region Standart Enumerator
/* /*

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableStrategyFixture.cs

@ -134,7 +134,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
#endregion #endregion
#region Setup7TearDown #region Setup/TearDown
private ICSharpCode.Reports.Core.TableStrategy SortTableStrategyFactory (SortColumn sortColumn) private ICSharpCode.Reports.Core.TableStrategy SortTableStrategyFactory (SortColumn sortColumn)
{ {

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/SubstringFixture.cs

@ -50,20 +50,33 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
} }
[Test]
public void Substring_Result_Has_Correct_Length()
{
string expression = "=Substring('Sharp',0,3)";
string val = this.evaluator.Evaluate(expression);
Assert.That(val.Length, Is.EqualTo(3));
}
[Test] [Test]
public void Concat_Substring_With_SubString() public void Concat_Substring_With_SubString()
{ {
string expression = "=Substring('SharpDevelop',0,5) + '-' + Substring('SharpDevelop',5)"; string expression = "=Substring('SharpDevelop',0,5) + '-' + Substring('SharpDevelop',5)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Sharp-Develop")); Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Sharp-Develop"));
} }
[Test] [Test]
public void Too_Much_Args_returns_Err_Message() public void Too_Much_Args_returns_Err_Message()
{ {
string expression = "=Substring('Sharp',0,3,5)"; string expression = "=Substring('Sharp',0,3,5)";
Assert.That(this.evaluator.Evaluate(expression),Is.StringStarting("Wrong number")); Assert.That(this.evaluator.Evaluate(expression),Is.StringStarting("Wrong number"));
} }
[TestFixtureSetUp] [TestFixtureSetUp]
public void Init() public void Init()
{ {

Loading…
Cancel
Save