Как я инициализирую элементы управления в InsertItemTemplate? - PullRequest
1 голос
/ 21 марта 2010

У меня есть, например, asp: FormView, который поддерживает чтение, вставку, обновление, удаление и привязан к источнику данных:

<asp:FormView ID="FormView1" runat="server" 
    DataSourceID="ObjectDataSource1" >
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("MyText") %>' />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyText") %>' />
    </EditItemTemplate>
    <InsertItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyText") %>' />
    </InsertItemTemplate>
</asp:FormView>

Если я нахожусь в режиме чтения или редактирования, элемент управления инициализируется со свойством MyText текущего объекта, который связан с FormView.

Но когда я перехожу в режим вставки, у меня нет «текущего объекта» (FormView1.DataItem действительно null), и элементы управления пусты.

Если я хочу инициализировать свой элемент управления TextBox определенным значением, как я могу это сделать? В каком событии я могу подключиться, чтобы установить значения по умолчанию для элементов управления в InsertItemTemplate?

Особенно я имею в виду использование ObjectDataSource. Я ожидал, что InsertItemTemplate инициализируется с бизнес-объектом, который лежит в основе моего ObjectDataSource и который создается каркасом ASP.NET просто с помощью конструктора по умолчанию, когда InsertItemTemplate активируется. В конструкторе по умолчанию я бы назначил членам класса значения по умолчанию, которые я хотел бы иметь в моих элементах управления InsertItemTemplate. Но, к сожалению, это не так: объект «по умолчанию» не создается и не привязывается к FormView. Так что, похоже, мне нужно инициализировать все элементы управления по отдельности или создать объект по умолчанию вручную и связать его с InsertItemTemplate FormView. Но как и где я могу это сделать?

Заранее спасибо!

1 Ответ

1 голос
/ 21 марта 2010

Попробуйте событие ModeChanged.

В нем вы можете использовать

TextBox _tb = this.FormView1.FindControl("TextBox1") as TextBox
if(_tb != null)
{
  _tb.Text = Mybusinessobject.property;
}

Если .FindControl возвращает ноль, попробуйте следующее:

this.FormView1.DataBind();
TextBox _tb = this.FormView1.FindControl("TextBox1") as TextBox
if(_tb != null)
{
  _tb.Text = Mybusinessobject.property;
}
...