Добавление фиктивной колонки в строго типизированный набор данных - PullRequest
2 голосов
/ 07 октября 2008

Я пишу сайт, который использует строго типизированные наборы данных.

Администратор БД, создавший созданную таблицу, дал столбцу значение, представляющее минус. Столбец является Do_Not_Estimate_Flag, где столбец может содержать «T» или «F». Я не могу изменить основную таблицу или логику, которая ее заполняет. Я хочу добавить столбец ESTIMATION_ALLOWED в DataRow моего строго типизированного DataSet. Я сделал это, используя частичный класс, который я могу изменить. (Существует автоматически сгенерированный частичный класс и не сгенерированный частичный класс, который я могу безопасно изменить.) Логика находится в свойстве частного класса. Беда в том, что при загрузке значения аля

<%#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";
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 07 октября 2008

DataBinder увидит, что вы привязываетесь к 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
   ...
0 голосов
/ 02 августа 2010

Если я помню, ST наборов данных datarows реализованы в частичных классах. Таким образом, вы можете добавить необходимую вам функциональность в частичный класс из основного класса строк набора данных ST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...