如何初始化InsertItemTemplate中的控件?

时间:2010-03-21 13:20:47

标签: asp.net data-binding insert datasource objectdatasource

我有 - 例如 - 一个asp:FormView,它支持Read,Insert,Update,Delete并绑定到DataSource:

<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>

如果我处于读模式或编辑模式,则控件将使用绑定到FormView的当前对象的属性MyText进行初始化。

但是当我进入插入模式时,我没有“当前对象”(FormView1.DataItem确实是null)并且控件是空的。

如果我想用特定值初始化我的TextBox控件,我该怎么办?我可以在哪个事件中挂钩以将默认值设置为InsertItemTemplate中的控件?

特别是我在考虑使用ObjectDataSource。我期望InsertItemTemplate初始化为一个业务对象,该业务对象是我的ObjectDataSource的基础,并且当InsertItemTemplate被激活时,它只是通过使用其默认构造函数由ASP.NET框架创建。在默认构造函数中,我会将类成员初始化为我想要在InsertItemTemplate的控件中使用的默认值。但不幸的是情况并非如此:没有创建“默认”对象并将其绑定到FormView。所以我似乎必须单独初始化所有控件或手动创建默认对象并将其绑定到FormView的InsertItemTemplate。但是我该怎样以及在哪里这样做?

提前致谢!

1 个答案:

答案 0 :(得分:1)

尝试ModeChanged事件。

其中你可以使用

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

如果.FindControl确实返回null,请尝试:

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