2010-10-29 62 views
0

是否有可能將detailsField中的templateField只在inserMode中可見?模板字段僅在插入模式下可見

<asp:TemplateField HeaderText="My Header" SortExpression="TypeName" Visible='<%# Eval("DetailsView1.CurrentMode == DetailsViewMode.Insert")%>'> 

這不工作的例外是:

數據綁定表達式僅支持在具有DataBinding事件的對象。 System.Web.UI.WebControls.TemplateField沒有DataBinding事件。

感謝您的幫助

回答

0

當您將字段添加到模板字段,你應該得到不同的模板,每種模式(您可以編輯各一個):

<asp:TemplateField HeaderText="CustomerName" SortExpression="CustomerName"> 
    <EditItemTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CustomerName") %>'></asp:TextBox> 
    </EditItemTemplate> 
    <InsertItemTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CustomerName") %>'></asp:TextBox> 
    </InsertItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("CustomerName") %>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 
2

我知道這是一個一個老問題,但只要我看到有人給出一個與被問到的問題完全無關的答案,我就會討厭它。

問題的答案是:是的。

並實現它是如下的方式:

在DetailsView控制,定義一個OnModeChanged事件。

在OnModeChanged事件處理程序,鍵入以下,指數更換成###行的DetailsView控件你想看到在插入模式下,只有當:

DetailsView dv = sender as DetailsView; 
    TableRow tr = dv.Rows[###] as TableRow; 
    DataControlFieldCell dcfc = tr.Controls[0] as DataControlFieldCell; 
    dcfc.ContainingField.Visible = dv.CurrentMode == DetailsViewMode.Insert;