我正在编写一个使用强类型数据集的网站。
创建表的DBA为列提供了一个表示负数的值。该列是'Do_Not_Estimate_Flag',其中列可以包含'T'或'F'。我无法更改基础表或填充它的逻辑。我想要做的是在我的强类型DataSet的DataRow中添加一个'ESTIMATION_ALLOWED'列。我使用我可以修改的分部类完成了这个。 (我可以安全地修改自动生成的partial类和非自动生成的partial类。)逻辑位于partial类的属性中。麻烦的是当值加载ala
时<%#DataBinder.Eval(Container.DataItem, "ESTIMATION_ALLOWED")%>
它直接到底层的DataRow忽略我的属性。我怎样才能最好地达到预期效果?
这是我的代码:
部分类MyFunkyDataTable {
private System.Data.DataColumn columnESTIMATION_ALLOWED;
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public System.Data.DataColumn ESTIMATION_ALLOWEDColumn
{
get
{
return columnESTIMATION_ALLOWED;
}
}
public override void EndInit()
{
//init class
columnESTIMATION_ALLOWED = new System.Data.DataColumn("ESTIMATION_ALLOWED", typeof(string), null, global::System.Data.MappingType.Element);
Columns.Add(columnESTIMATION_ALLOWED);
columnESTIMATION_ALLOWED.ReadOnly = true;
//init Vars
columnESTIMATION_ALLOWED = Columns["ESTIMATION_ALLOWED"];
base.EndInit();
}
}
partial class MyFunkyRow
{
public string ESTIMATION_ALLOWED
{
get
{
if(DO_NOT_EST_FLAG == "N")
{
return "Yes";
}
return "No";
}
}
}
答案 0 :(得分:1)
DataBinder将看到您绑定到DataRow并使用其字段而不是您定义的任何属性。
您可以创建一种方法来执行您想要的操作,例如:
<%#FormatFlag(DataBinder.Eval(Container.DataItem, "Do_Not_Estimate_Flag" ))%>
你有一个方法:
protected string FormatFlag(object doNotEstimateFlag)
{
if (doNotEstimateFlag.ToString() == "N") return "Yes";
return "No";
}
另一种方法是修改填充DataTable的查询。例如,您可以在类型化数据集中使用“ESTIMATE_ALLOWED”列。填充它的查询看起来类似于以下内容(依赖于数据库,这适用于SQL Server):
SELECT
...
CASE WHEN Do_Not_Estimate_Flag = 'N' THEN 'Yes' ELSE 'No' END ESTIMATE_ALLOWED,
...
FROM
...
答案 1 :(得分:0)
如果我记得,ST数据集数据行是在部分类中实现的。因此,您可以在主ST数据集行类的部分类中添加所需的功能。