我正在使用VS2005 C#。
目前我有一个GridView,我已经将我的一个GridView控件更改为我的列名Gender
,从默认的TextBox
更改为DropDownList
,我给了ID
对GenderList
的控件的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>
编辑:
尝试实施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
}
答案 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)