使用下拉列表控件更新GridView
本文关键字:更新 GridView 控件 下拉列表 | 更新日期: 2023-09-27 18:16:49
我使用的是VS2005 c#。
目前我有一个GridView,我已经改变了我的GridView控件到我的列名Gender
,从默认的TextBox
到DropDownList
,我给了GenderList
控件的ID
,它包含2个值,M和F。
我有一个默认的更新语句,它能够在edit
之后更新GridView,如下所示:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString=
"<%$ ConnectionStrings:SODConnectionString %>" UpdateCommand="UPDATE
[UserMasterData] SET [Name] = @Name, [Age] = @Age, [ContactNo]=@ContactNo,
[Address]=@Address, [Gender]=@Gender"/>
上面的UPDATE查询工作完美,现在我已经改变了我的Gender
文本框到下拉列表, UPDATE
查询给了我一个错误,说:
Must declare the scalar variable "@Gender".
我假设UPDATE查询无法从我的Gender
列中找到值。
我试图将UPDATE查询修改为@GenderList
,但它不起作用。
有人知道我应该做什么UPDATE查询,以便我的UPDATE查询可以从我的Gender
列的GenderList
下拉列表中找到值?
谢谢。
下面是我之前的Gender
列,带有一个文本框控件:
<asp:BoundField HeaderText="Gender"
DataField="Gender"
SortExpression="Gender"></asp:BoundField>
下面是我的Gender
和下拉列表控件:
<asp:TemplateField HeaderText="Gender" SortExpression="Gender" >
<EditItemTemplate>
<asp:DropDownList ID="GenderList" runat="server" Width="50px" >
<asp:ListItem>M</asp:ListItem>
<asp:ListItem>F</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
编辑:
尝试实现RowDatBound
和onRowUpdating
:
RowDatBound
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRowView dRowView = (DataRowView)e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList genderList= (DropDownList)e.Row.FindControl("GenderList");
genderList.SelectedValue = dRowView[2].ToString();
}
}
}
RowUpdating
.aspx.cs
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList genderSelect =(DropDownList)GridView1.Rows[e.RowIndex].FindControl("GenderList");
SqlDataSource1.UpdateParameters["Gender"].DefaultValue =
genderSelect.SelectedValue; --> error says not set to an instance of an object
}
如果你正在使用SqlDataSource并通过它更新数据,那么你所要做的就是为下拉列表GenderList设置2路绑定。
您可以通过设计器或直接在源代码中设置
<EditItemTemplate>
<asp:DropDownList ID="GenderList" runat="server"
SelectedValue='<%# Bind("Gender") %>'>
<asp:ListItem>M</asp:ListItem>
<asp:ListItem>F</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
注意这里使用了双向绑定
您需要使用其selected value属性,下拉列表是值的集合,但是您正在为更新语句分配标量值。你必须检查它是否处于更新模式,你需要获得下拉列表的选定项值,并将该值用作更新语句的参数。
使用gridview下拉列表编辑
在rowdataboundevent
中检查其是否处于编辑模式if ((e.Row.RowState & DataControlRowState.Edit) > 0)