使用下拉列表控件更新GridView

本文关键字:更新 GridView 控件 下拉列表 | 更新日期: 2023-09-27 18:16:49

我使用的是VS2005 c#。

目前我有一个GridView,我已经改变了我的GridView控件到我的列名Gender,从默认的TextBoxDropDownList,我给了GenderList控件的ID,它包含2个值,MF

我有一个默认的更新语句,它能够在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>

编辑:

尝试实现RowDatBoundonRowUpdating:


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
}

使用下拉列表控件更新GridView

如果你正在使用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)