У меня есть столбцы GridView, которые я хотел бы обновить с помощью события RowUpdating. Для этого я использую выпадающий список в GridView EditItemTemplate, и он отлично работает.
Однако при входе в режим редактирования GridView возникает проблема; выбранный элемент в раскрывающемся списке показывает его значение по умолчанию, а не ранее выбранные элементы, которые хранятся в базе данных. Поэтому, если пользователь редактирует другой столбец и пропускает раскрывающийся список, столбец GridView (с раскрывающимся списком в EditItemTemplate) будет ошибочно обновлен до значения по умолчанию для раскрывающегося списка.
Другими словами, когда я вхожу в режим редактирования GridView, я хочу, чтобы в раскрывающемся списке отображалось (или выбиралось) значение, связанное с моей базой данных SQL, и не показывавшее его значение по умолчанию или первое значение. Я попытался использовать <% # Bind ("zone")%> ', который работает для текстового поля, но не работает для выпадающего списка. Есть идеи?
Вот мой код GridView:
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataKeyNames="ID" AllowSorting="False"
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowdatabound="GridView1_RowDataBound"
onrowupdating="GridView1_RowUpdating"
EnableViewState="False">
<Columns>
<asp:TemplateField HeaderText="Zone" SortExpression="Zone">
<EditItemTemplate>
<asp:DropDownList ID="ddlZone" runat="server" Width="80px">
<asp:ListItem Value="zone1">Zone 1</asp:ListItem>
<asp:ListItem Value="zone2">Zone 2</asp:ListItem>
<asp:ListItem Value="zone3">Zone 3</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblZone" runat="server" Text='<%# Bind("zone") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Subzone" SortExpression="Subzone">
<EditItemTemplate>
<asp:TextBox ID="txtSubzone" runat="server" Text='<%# Bind("subzone") %>' Width="100px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblSubzone" runat="server" Text='<%# Bind("subzone") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Код:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string textZone = (GridView1.Rows[e.RowIndex].FindControl("ddlZone") as DropDownList).SelectedItem.Value;
string textSubzone = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtSubzone")).Text;
string query = "UPDATE tblRegion SET zone = '" + textZone
+ "', subzone ='" + Subzone"
+ "' WHERE (ID ='" + entryID + "')";
SqlCommand sqlCmd = new SqlCommand(query, conn);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
conn.Open();
DataTable dt = new DataTable();
sqlDa.Fill(dt);
conn.Close();
}
Заранее спасибо: -)