C# ASP.NET DropDownList.SelectedValue丢失i!nPostBack

C# ASP.NET DropDownList.SelectedValue丢失i!nPostBack,c#,asp.net,postback,dropdown,list.selectedvalue,C#,Asp.net,Postback,Dropdown,List.selectedvalue,这个问题解决了,请看我在帖子下面的评论 我的代码有一个困扰我的问题: 我有一个ASP.NET DropDownList(简单,不在gridview中等等…),它是静态绑定到数据库查询的数据。此外,我在标记中添加了一个列表项: <asp:DropDownList ID="ddDeviceSelector" runat="server" DataSourceID="CryringDB_InventoryAssets" DataTextField="Identifier" DataValueFi

这个问题解决了,请看我在帖子下面的评论

我的代码有一个困扰我的问题: 我有一个ASP.NET DropDownList(简单,不在gridview中等等…),它是静态绑定到数据库查询的数据。此外,我在标记中添加了一个列表项:

<asp:DropDownList ID="ddDeviceSelector" runat="server" DataSourceID="CryringDB_InventoryAssets" DataTextField="Identifier" DataValueField="RowID" AutoPostBack="True" OnTextChanged="ddDeviceSelector_IndexChanged" ToolTip="Select a device by name" AppendDataBoundItems="True" Width="300px">
    <asp:ListItem>-- Select Device OR Enter Data of New Device --</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="CryringDB_InventoryAssets" runat="server" connectionString="<%$ ConnectionStrings:CMSValuesExplicitUser %>" SelectCommand="SELECT valueColumn, textColumns FROM myTable"></asp:SqlDataSource>
代码执行时没有问题,但我在调试器中看到一条错误消息(第“ddDeviceSelector.SelectedValue=rowID;”行后的断点)

错误CS0103:名称“SelectedValue”在当前上下文中不存在

(此信息翻译自德语,可能与英语有明显不同)


非常感谢您的帮助。

请尝试在dropdownlist的数据绑定事件中设置所选值,这将确保您的dropdownlist完全与数据绑定。在尝试设置所选值之前,请记住也委派此方法:

//In your designer file
ddDeviceSelector.DataBound += new System.EventHandler(ddDeviceSelector_DataBound);

protected void ddDeviceSelector_DataBound(object sender, EventArgs e)
{
    String rowID = null;
    rowID = Request.QueryString["rid"];

    if (rowID != null)
    {
        setUiPropertiesByMode(classConstants.editMode);
        ddDeviceSelector.Enabled = true;
        ddDeviceSelector.Enabled = true;
        ddDeviceSelector.SelectedValue = rowID;
    }
}

嗨,詹姆斯,谢谢你的回答。不幸的是,它不起作用:(哦-抱歉,我现在看到错误是由我的错误引起的:我选择了错误的变量来观察…但是,SelectValue没有改变。我检查了ddDeviceSelector的项目-我想选择的项目在那里,但是如果我执行“DataBind()”设置所选值后,程序会因“值不在列表中”而崩溃。问题得到了解决:在我用来调用上面的页面/代码的URL中,参数rid以大写字符串(数据库级别的唯一标识符)的形式传输。在运行时,下拉列表中的项目是小写的,因此SelectedValue(区分大小写)不匹配。代码更改为:if(rowID!=null){rowID=rowID.ToLower();ddDeviceSelector.Enabled=true;ddDeviceSelector.SelectedValue=rowID;setAssetValuesByRowID(rowID);}
//In your designer file
ddDeviceSelector.DataBound += new System.EventHandler(ddDeviceSelector_DataBound);

protected void ddDeviceSelector_DataBound(object sender, EventArgs e)
{
    String rowID = null;
    rowID = Request.QueryString["rid"];

    if (rowID != null)
    {
        setUiPropertiesByMode(classConstants.editMode);
        ddDeviceSelector.Enabled = true;
        ddDeviceSelector.Enabled = true;
        ddDeviceSelector.SelectedValue = rowID;
    }
}