Browse Source

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

pull/15/head^2
peterforstmeier 14 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 @@ -71,7 +71,6 @@ namespace ICSharpCode.Reports.Core
public override void Render(ReportPageEventArgs rpea)
{
// string toPrint = CheckForNullValue();
base.Text = StandardFormatter.FormatOutput(DBValue, this.FormatString, base.DataType, this.NullValue);
base.Render(rpea);
}
@ -87,7 +86,6 @@ namespace ICSharpCode.Reports.Core @@ -87,7 +86,6 @@ namespace ICSharpCode.Reports.Core
[Browsable(false)]
public virtual string DBValue {get;set;}
public virtual string ColumnName {
get {
return columnName;

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

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

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 @@ -177,8 +177,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
private IDataNavigator PrepareDateTimeGrouping ()
{
Console.WriteLine("PrepareDateTimeGrouping ()");
GroupColumn gc = new GroupColumn("RandomDate",1,ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings();
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 @@ -139,8 +139,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
DataRow r = dataNav.Current as DataRow;
string actual = r["last"].ToString();
Assert.GreaterOrEqual(compareTo,actual);
// string ss = String.Format("< {0} > <{1}>",compareTo,actual);
// Console.WriteLine(ss);
compareTo = actual;
}
}
@ -148,6 +146,34 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy @@ -148,6 +146,34 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
#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
/*

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 @@ -134,7 +134,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
#endregion
#region Setup7TearDown
#region Setup/TearDown
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 @@ -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]
public void Concat_Substring_With_SubString()
{
string expression = "=Substring('SharpDevelop',0,5) + '-' + Substring('SharpDevelop',5)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Sharp-Develop"));
}
[Test]
public void Too_Much_Args_returns_Err_Message()
{
string expression = "=Substring('Sharp',0,3,5)";
Assert.That(this.evaluator.Evaluate(expression),Is.StringStarting("Wrong number"));
}
[TestFixtureSetUp]
public void Init()
{

Loading…
Cancel
Save