2

我正在编写一个使用强类型数据集的网站。

创建该表的 DBA 为一列提供了一个表示负数的值。该列是“Do_Not_Estimate_Flag”,其中该列可以包含“T”或“F”。我无法更改基础表或填充它的逻辑。我想要做的是在我的强类型数据集的 DataRow 中添加一个“ESTIMATION_ALLOWED”列。我已经使用可以修改的部分类完成了这项工作。(我可以安全地修改自动生成的部分类和非自动生成的部分类。)逻辑在部分类的属性中。麻烦的是,当值加载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";
            }
        }
    }
4

2 回答 2

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
   ...
于 2008-10-07T18:47:55.490 回答
0

如果我记得,ST 数据集数据行是在部分类中实现的。因此,您可以在主 ST 数据集行类的部分类中添加您需要的功能。

于 2010-08-02T19:09:34.167 回答