【问题标题】:Adding dummy Column to strongly typed dataset将虚拟列添加到强类型数据集
【发布时间】:2010-09-15 20:01:48
【问题描述】:

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

创建表的 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";
            }
        }
    }

【问题讨论】:

    标签: c# ado.net dataset strongly-typed-dataset


    【解决方案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
       ...
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多