Несколько элементов управления с привязкой к данным в одном столбце GridView - PullRequest
1 голос
/ 25 июня 2010

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

3 голосов
/ 25 июня 2010

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

1 голос
/ 25 июня 2010

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

RowUpdating / RowUpdated

RowDeleting / RowDeleted

....

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

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

...