【问题标题】:template field visible only in insert mode模板字段仅在插入模式下可见
【发布时间】:2010-10-29 13:32:27
【问题描述】:

是否可以让 detailsView 中的 templateField 仅在 inserMode 中可见?

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

这不起作用的例外是:

只有具有 DataBinding 事件的对象才支持数据绑定表达式。 System.Web.UI.WebControls.TemplateField 没有 DataBinding 事件。

感谢您的帮助

【问题讨论】:

    标签: c# asp.net .net-4.0


    【解决方案1】:

    我知道这是一个老问题,但每当我看到有人给出与所问问题完全无关的答案时,我就讨厌它。

    问题的答案是:是的。

    实现方法如下:

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

    【讨论】:

      【解决方案2】:

      当您将字段转换为模板字段时,您应该为每种模式获取单独的模板(并且您可以编辑每个模板):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        相关资源
        最近更新 更多