Как добавить свойство к адаптеру таблицы, к которому можно привязать? - PullRequest
0 голосов
/ 04 февраля 2009

У меня есть таблица базы данных TravelRequest, которая содержит, помимо прочего, поля SignOffName и SignOffDate. У меня есть настольный адаптер TravelRequestTable на основе этой таблицы. У меня есть элемент управления DetailsView, который использует это через ObjectDataSource. Должны быть все довольно стандартные вещи.

Что я хочу сделать, это добавить свойство с именем SignOffNameDate к адаптеру таблицы, которое объединяет два поля и , чтобы иметь возможность привязываться к нему в элементе управления DetailsView. Я хочу сделать это программно, а не добавлять другой столбец в SQL, потому что работать с нулевыми значениями сложно и зависит от некоторых других бизнес-правил.

Вот что я попробовал:

public partial class TravelRequestDS
{
    public partial class TravelRequestRow
    {
        public string SignOffNameDate
        {
            get { return CombineNameDate(SignOffName, SignOffDate); }
        }
    }
}

Это свойство прекрасно работает, когда я обращаюсь к нему программно, но когда я пытаюсь привязать его к моей странице aspx:

<asp:DetailsView ID="DetailsView_TravelRequest" runat="server" AutoGenerateRows="False"
    DataKeyNames="TravelRequestID" DataSourceID="ObjectDataSource_TravelRequest">
        <Fields>
            <asp:BoundField DataField="SignOffNameDate"
                HeaderText="Sign Off" />
            ...

Я получаю исключение System.Web.HttpException: «Поле или свойство с именем« SignOffNameDate »не найдено в выбранном источнике данных».

Есть идеи, как я могу это сделать? Есть ли атрибут, который мне нужно добавить в свойство?

Ответы [ 2 ]

0 голосов
/ 04 марта 2010

Если ваша цель - отобразить объединенный результат в одном нередактируемом поле, вы можете сделать это следующим образом:

<asp:DetailsView ID="DetailsView_TravelRequest" runat="server" AutoGenerateRows="False"
    DataKeyNames="TravelRequestID" DataSourceID="ObjectDataSource_TravelRequest">
        <Fields>
            <asp:TemplateField HeaderText="Sign Off" SortExpression="SignOffDate">               
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("SignOffName") %>'></asp:Label>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("SignOffDate") %>'></asp:Label>
                    </ItemTemplate>
            </asp:TemplateField>  
            ... 
0 голосов
/ 04 февраля 2009

Если вы не хотите изменять структуру таблицы, измените метод по умолчанию, который загружает данные в ваш адаптер (обычно это называется Fill), скорее всего, вы делаете Select * From [TravelRequest] или выбираете отдельные поля. то, что вы могли бы сделать, это изменить свой оператор выбора запроса TableAdapter на что-то вроде

Select [YourCol1],[YourCol2], SignOffNameDate as Null From [TravelRequest]

Изменение запроса по умолчанию и выбор SignOffNameDate в качестве нуля даст вам доступ для установки этого значения

...