У меня есть элемент управления GridView, в котором я хочу иметь 2 видимых поля, метку и раскрывающийся список. Вместо того чтобы использовать RowEditTemplate, я надеялся просто определить ItemTemplate как значение раскрывающегося списка.
В случае изменения раскрывающегося списка я хочу выполнить некоторый код, в котором я могу получить целочисленный ключ для этой строки таблицы и новое выбранное значение раскрывающегося списка. Примерно так:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="pk_id" onrowdeleting="GridView2_RowDeleting"
onrowcommand="GridView2_RowCommand">
<Columns>
<asp:BoundField DataField="pk_id" Visible="False" />
<asp:BoundField DataField="Column1" HeaderText="Column1" />
<asp:TemplateField HeaderText="Column2">
<ItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server"
DataSourceID="SqlDataSource" DataTextField="name"
DataValueField="id2"
SelectedValue='<%# Bind("id2") %>'
AutoPostBack="True">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:Main %>"
SelectCommand="get_TestData" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
Код за
protected void Page_Load(object sender, EventArgs e)
{
...
GridView2.DataSource = new Person(id).GetDataSet();
GridView2.DataBind();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
// Call delete function with the key
// Delete(key);
}
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
// figure out which row sent it
// UpdateRecord(key, newvalue)
}
Раскрывающийся список заполняется и значение выбирается правильно, но я не могу заставить удаление или обновление по раскрывающемуся списку работать должным образом. Я попытался реализовать эти функции, но RowCommand, похоже, не срабатывает, когда выпадающий список вызывает обратную передачу. Даже если это срабатывает, я не уверен, как получить нужные мне значения. Есть ли лучший способ, которым я должен идти об этом?