DonA,如果你还没有找到你的答案,我会解释我做了什么来做一些类似于你之后我相信的事情。
在网格视图中,我有各种 asp:TempleteField,一个是这样的:-
<ItemTemplate>
<asp:Label ID="lblActive" runat="server" Text='<%# Bind("Active") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<%--<asp:TextBox ID="txtboxActive" runat="server" Text='<%# Bind("Active") %>' Width="20px" TextMode="SingleLine" CssClass="textboxEdit"></asp:TextBox>--%>
<asp:DropDownList ID="activeDDL" CausesValidation="False" AutoPostBack="False" runat="server"> <asp:ListItem Text="No" Value="0"></asp:ListItem>
<asp:ListItem Text="Yes" Value="1" Selected="True"></asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
如您所见,在 EditItemTemplete 中有两个下拉列表项(我也留下了与您的代码类似的代码,用于绑定到 DDL 值的数据库,但我不再使用,因此被注释掉了)
然后在 ID、runat="server"、DataKeyNames 等旁边
<asp:Gridview ID=""...
我有
OnRowUpdated="info_GridView_RowUpdated"
然后在我的 SQL 函数后面的 C# 代码中运行,以使用 DDL 中的设置更新数据库表,就像这样(我还放入了一些其他的 Gridview.Databind() 来重置我的其他网格视图)
protected void info_GridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
// The update operation was successful. Retrieve the row being edited.
int index = info_GridView.EditIndex;
GridViewRow row = info_GridView.Rows[index];
int itemID = Convert.ToInt32(row.Cells[4].Text); // Cells[4] is only one available as others are being edited!
// update Active value in the database //
comm = new SqlCommand("UPDATE Products SET Active=@active WHERE ItemID=@itemID", objConn);
comm.Parameters.AddWithValue("@active", ddlValue); // this stores DDL value in database
comm.Parameters.AddWithValue("@itemID", itemID);// Convert.ToInt32(propertyRefTextBox.Text));
objConn.Open();
comm.ExecuteNonQuery();
objConn.Close();
// force update and reset selectedIndex of other gridviews //
Category_GridView.DataBind();
editImages_GridView.DataBind();
Category_GridView.SelectedIndex = -1;
editImages_GridView.SelectedIndex = -1;
}
希望以上有所帮助。
特雷夫。