c# - 将虚拟列添加到强类型数据集

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

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

创建表的 DBA 为一列指定了一个代表负数的值。该列是“Do_Not_Estimate_Flag”,其中该列可以包含“T”或“F”。我无法更改基础表或填充它的逻辑。我想要做的是将“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";
            }
        }
    }

最佳答案

DataBinder 将看到您正在绑定(bind)到 DataRow 并使用其字段而不是您定义的任何属性。

你可以创建一个方法来做你想做的事,例如:

<%#FormatFlag(DataBinder.Eval(Container.DataItem, "Do_Not_Estimate_Flag" ))%>

你有一个方法:

protected string FormatFlag(object doNotEstimateFlag)
{
    if (doNotEstimateFlag.ToString() == "N") return "Yes";
    return "No";
} 

另一种方法是修改填充数据表的查询。例如,您可以在类型化的数据集中有一列“ESTIMATE_ALLOWED”。填充它的查询类似于以下内容(取决于数据库,这是针对 SQL Server 的):

SELECT
   ...
   CASE WHEN Do_Not_Estimate_Flag = 'N' THEN 'Yes' ELSE 'No' END ESTIMATE_ALLOWED,
   ...
FROM
   ...

关于c# - 将虚拟列添加到强类型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/179706/

相关文章:

c# - 从异步方法返回IAsyncEnumerable

c# - 使用 IDataReader 或 SqlDataReader

C# 数据集到 Xml,节点重命名

c# - System.Data.dll ("Incorrect syntax near ' )'."中的“System.Data.SqlClient.SqlException”)?

ajax - delphi中如何在不关闭和打开数据集的情况下刷新dbgrid?

java - dataset .net 无法在 java web 服务客户端上解析

c# - ISerializable 与递归 child

c# - 如何将 SQL bigint 转换为等效的 C#

c# - 如何将值传递到 C# 中的图像按钮单击事件?

c# - 如何测试与数据库的连接是否成功建立?