【问题标题】:Multiple databound controls in a single GridView column单个 GridView 列中的多个数据绑定控件
【发布时间】:2011-03-08 08:22:22
【问题描述】:

我有一个将数据绑定到数据集的网格视图。在网格中,我有一列 DefaultValue,其中包含三个控件 - 一个下拉列表、一个复选框和一个文本框。根据传入的数据,它可以切换到这些控件中的任何一个。当我们只需要显示数据时,一切都很简单——在 gridview_prerender 事件中,我只是让其中一个控件可见。控件设置如下:

<asp:TemplateField HeaderText="Default Value" SortExpression="DefaultValue">
 <ItemTemplate>
  <asp:TextBox ID="txt_defaultValue_view" runat="server" Text='<%# Bind("DefaultValue") %>' Enabled ="false" />
  <asp:DropDownList ID="ddl_defaultValue_view" runat="server" Enabled ="false" />
  <asp:CheckBox ID="chk_defaultValue_view" runat="server" Enabled ="false"  />
 </ItemTemplate>
 <EditItemTemplate>
  <asp:TextBox ID="txt_defaultValue_edit" runat="server" Text='<%# Bind("DefaultValue") %>'/>
  <asp:DropDownList ID="ddl_defaultValue_edit" runat="server" />
  <asp:CheckBox ID="chk_defaultValue_edit" runat="server" />
 </EditItemTemplate>
</asp:TemplateField>

当我处于编辑模式并且我需要使用新数据更新网格时,我的问题就开始了。由于只有文本框控件是数据绑定的,因此 RowUpdating 事件只能访问文本框列中的数据,而我的所有其他数据都会被丢弃。我也无法使用复选框和下拉列表控件进行数据绑定,因为它们会获得无效的数据类型异常。那么,有谁知道如何更新具有三个不同控件的列,这三个控件中的每一个都可能具有有效数据?

谢谢

【问题讨论】:

  • 而且我的 gridview viewstate 设置为 false,不幸的是,我的程序设计无法将其设置为 true

标签: asp.net gridview gridviewcolumn


【解决方案1】:

首先,我将在 Grid 的 RowDataBound 而不是 PreRender 中切换控件的可见性,因为它只能在 DataBinding 上更改,而不是在每次回发时更改。 您还可以将下拉菜单绑定到其数据源,更改复选框的选中状态并根据行的Dataitem 设置文本框的文本属性。 当您更新时,您可以在 RowUpdating 中使用 FindControl 找到您的控件并获取它们的值(例如 Dropdownlist.SelectedValue)。

【讨论】:

  • 哇!你是真神!!!你给我的链接和你的解释为我节省了大量时间。谢谢!!!!
【解决方案2】:

GridView 有一对事件:

行更新/行更新

行删除/行删除

....

在您的情况下,您需要 RowUpdating - 在执行更新之前调用,因此在行预期控件(例如复选框)中找到并在传递到数据库之前做好准备

作为另一种方式查看使用 ObjectDataSource 事件更新的可能性 - 这是为查询执行指定参数的常用方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多