DropDownList.SelectedValue 未生效
DropDownList.SelectedValue not taking effect
这似乎是一个重复的问题,但我认为不是。我正在 ASPX 页面中设置我的 asp:DropDownList
,并在检查当前 gridview 行是否正在编辑后,在 RowDataBound
事件期间将其设置为 SelectedValue
。当我设置控件的 SelectedValue
属性 时没有抛出任何错误,当我设置它后立即检查它时,它没有改变。
这里是相关代码
<asp:SqlDataSource
ID="DataSourceAnswerGroups"
runat="server"
ConnectionString="<%$ ConnectionStrings %>"
DataSourceMode="DataSet"
SelectCommand="
SELECT
Id
,Description
FROM dbo.table
WHERE Active = 1
ORDER BY Description
;
" />
<asp:GridView
ID="GridView"
runat="server"
OnRowDataBound="GridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Answer Group" SortExpression="AnswerGroup" ItemStyle-Wrap="false" ItemStyle-CssClass="left">
<ItemTemplate>
<%# Eval("AnswerGroup") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
ID="ddlAnswerGroupEdit"
runat="server"
DataSourceID="DataSourceAnswerGroups"
DataValueField="Id"
DataTextField="Description"/>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex == GridView.EditIndex)
{
DropDownList ddlAnswerGroupEdit = (DropDownList)e.Row.FindControl("ddlAnswerGroupEdit");
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();
Response.Write(GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString() + "<br/>"); // this outputs the correct guid
Response.Write(ddlAnswerGroupEdit.SelectedValue + "<br/>"); // this always outputs the same guid, the one that represents the first item on the list.
}
}
代码中的任何地方都没有对 DdataSource 或 DropDownList 进行其他操作。
默认选择应该改变,但它正在默默地失败。
任何帮助将不胜感激。
你在哪里绑定AnswerGroupId?
替换它
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();
在
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex]["AnswerGroupId"].ToString();
在所有愚蠢的问题中。这并没有解决它,但它确实让我朝着正确的方向前进。这是一个区分大小写的问题。 SQL 服务器以大写形式返回 guiid,而控制项以小写形式返回。这是我必须做的唯一修复:
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString().ToLower();
这似乎是一个重复的问题,但我认为不是。我正在 ASPX 页面中设置我的 asp:DropDownList
,并在检查当前 gridview 行是否正在编辑后,在 RowDataBound
事件期间将其设置为 SelectedValue
。当我设置控件的 SelectedValue
属性 时没有抛出任何错误,当我设置它后立即检查它时,它没有改变。
这里是相关代码
<asp:SqlDataSource
ID="DataSourceAnswerGroups"
runat="server"
ConnectionString="<%$ ConnectionStrings %>"
DataSourceMode="DataSet"
SelectCommand="
SELECT
Id
,Description
FROM dbo.table
WHERE Active = 1
ORDER BY Description
;
" />
<asp:GridView
ID="GridView"
runat="server"
OnRowDataBound="GridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Answer Group" SortExpression="AnswerGroup" ItemStyle-Wrap="false" ItemStyle-CssClass="left">
<ItemTemplate>
<%# Eval("AnswerGroup") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
ID="ddlAnswerGroupEdit"
runat="server"
DataSourceID="DataSourceAnswerGroups"
DataValueField="Id"
DataTextField="Description"/>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex == GridView.EditIndex)
{
DropDownList ddlAnswerGroupEdit = (DropDownList)e.Row.FindControl("ddlAnswerGroupEdit");
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();
Response.Write(GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString() + "<br/>"); // this outputs the correct guid
Response.Write(ddlAnswerGroupEdit.SelectedValue + "<br/>"); // this always outputs the same guid, the one that represents the first item on the list.
}
}
代码中的任何地方都没有对 DdataSource 或 DropDownList 进行其他操作。 默认选择应该改变,但它正在默默地失败。 任何帮助将不胜感激。
你在哪里绑定AnswerGroupId?
替换它
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString();
在
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex]["AnswerGroupId"].ToString();
在所有愚蠢的问题中。这并没有解决它,但它确实让我朝着正确的方向前进。这是一个区分大小写的问题。 SQL 服务器以大写形式返回 guiid,而控制项以小写形式返回。这是我必须做的唯一修复:
ddlAnswerGroupEdit.SelectedValue = GridView.DataKeys[e.Row.RowIndex].Values["AnswerGroupId"].ToString().ToLower();