Несколько элементов управления с привязкой к данным в одном столбце GridView

У меня есть вид сетки, которая связана с набором данных. В сетке у меня есть столбец 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>

Моя проблема начинается, когда я нахожусь в режиме редактирования, и мне нужно обновить сетку новыми данными. Поскольку только элемент управления textbox связан с данными, событие RowUpdating может получить доступ только к данным из столбца textbox, а все остальные мои данные просто отбрасываются. Я также не могу привязать данные с помощью флажка и элемента управления dropdownlist, так как они могут получить недопустимое исключение типа данных. Итак, кто-нибудь знает, как я могу обновить столбец, который имеет три разных элемента управления, где каждый из этих трех элементов управления может иметь действительные данные?

Спасибо

2 ответа

Решение

Во-первых, я бы переключил видимость элементов управления в RowDataBound Grid, а не в PreRender, потому что он может изменяться только в DataBinding, а не при каждой обратной передаче. Вы также можете привязать раскрывающийся список к его источнику данных, изменить проверенное состояние флажка и установить свойство Text для текстового поля в соответствии с элементом данных строки. При обновлении вы можете найти элементы управления с помощью FindControl в RowUpdating и получить их значения (например, Dropdownlist.SelectedValue).

GridView имеет пару событий:

RowUpdating / RowUpdated

RowDeleting / RowDeleted

....

В вашем случае вам нужен RowUpdating - он вызывается непосредственно перед выполнением обновления, поэтому найдите в строке ожидаемый элемент управления (скажем, флажок) и выполните подготовку перед передачей в базу данных.

В качестве другого способа рассмотрим возможность использования ObjectDataSource Updating - это обычный способ указать параметры для выполнения запроса.

Другие вопросы по тегам