2010-03-21 40 views
1

我有 - 例如 - 一个asp:FormView控件支持读取,插入,更新,删除,并绑定到一个数据源:如何初始化InsertItemTemplate中的控件?

<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被激活时,只需使用它的默认构造函数就可以创建它。在默认的构造函数中,我会将类成员初始化为我想要在我的InsertItemTemplate控件中使用的默认值。但不幸的是,情况并非如此:没有“默认”对象被创建并绑定到FormView。因此,我似乎必须单独初始化所有控件或手动创建默认对象,并将其绑定到FormView的InsertItemTemplate。但是如何以及在哪里可以做到这一点?

在此先感谢!

回答

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; 
} 
+0

感谢这个想法!我现在在DataBound事件中使用了类似的代码来检查if(FormView1.CurrentMode == FormViewMode.Insert),它似乎也能工作。我正在寻找更多的选项来绑定一个完整的(默认初始化)业务对象到FormView,但我没有看到一种方式。看来我必须通过控制来启动控制。 – Slauma 2010-03-22 18:29:05