单个GridView列中的多个数据绑定控件

时间:2010-06-25 15:25:15

标签: asp.net gridview gridviewcolumn

我有一个网格视图,它是绑定到数据集的数据。在网格中,我有一个列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事件只能访问文本框列中的数据,而我的所有其他数据都会被丢弃。我也无法使用checkbox和dropdownlist控件进行数据绑定,因为它们可能会获得无效的数据类型异常。那么,是否有人知道如何更新具有三个不同控件的列,其中这三个控件中的每一个都可能具有有效数据?

由于

2 个答案:

答案 0 :(得分:3)

首先,我会切换网格RowDataBound中控件的可见性,而不是PreRender,因为它只能在DataBinding上更改,而不能在每次回发时更改。 您还可以将Dropdown绑定到其数据源,更改Checkbox的checked-state,并根据Row的Dataitem设置Textbox的Text-property。 更新时,您可以使用RowUpdating中的FindControl查找控件并获取其值(f.e.Dropdownlist.SelectedValue)。

答案 1 :(得分:1)

GridView有一对事件:

RowUpdating / RowUpdated

RowDeleting / RowDeleted

...

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

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