使用Dropdownlist控件更新GridView

时间:2011-12-06 07:17:47

标签: c# asp.net sql

我正在使用VS2005 C#。

目前我有一个GridView,我已经将我的一个GridView控件更改为我的列名Gender,从默认的TextBox更改为DropDownList,我给了IDGenderList的控件的1}},它包含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查询可以在我的GenderList列中的Gender下拉列表中找到值?

谢谢。


以下是我之前的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

}

2 个答案:

答案 0 :(得分:2)

如果您正在使用SqlDataSource并通过它更新数据,那么您所要做的就是为下拉列表GenderList设置双向绑定。

您可以通过设计师或直接在源中设置

 <EditItemTemplate>
                <asp:DropDownList ID="GenderList" runat="server" 
                    SelectedValue='<%# Bind("Gender") %>'>
                    <asp:ListItem>M</asp:ListItem>
                    <asp:ListItem>F</asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>

注意这里正在使用双向绑定。

答案 1 :(得分:0)

您需要使用其选定的值属性,下拉列表是值集合,但您要为更新语句指定标量值。 您必须检查何时处于更新模式,您需要获取下拉列表的选定项目值,并将该值用作更新语句的参数。
Editing with Dropdownlist in gridview

检查其处于编辑模式或不在RowDataBound事件

中使用
if ((e.Row.RowState & DataControlRowState.Edit) > 0)