下拉列表不会填充

时间:2011-12-05 21:32:21

标签: c# asp.net

我不确定如何纠正以下问题。我有一个具有对象数据源的下拉列表。然后在代码中有一个像这样的方法

void InitPageData()
{
    MembershipUser user = Membership.GetUser();
    DataSetTableAdapters.MemberInfoTableAdapter da = new DataSetTableAdapters.MemberInfoTableAdapter();
    DataSet.MemberInfoDataTable dt = da.GetMember((Guid)user.ProviderUserKey);
    if (dt.Rows.Count == 1)
    {
        DataSet.MemberInfoRow mr = dt[0];
        //rank.Text = mr.rank;
        //position.Text = mr.position;

        UserName.Text = user.UserName;
        ...
    }

此方法填充页面上的表单字段。我正在尝试做的是从ods填充排名下拉列表,但使用上面的方法用行rank.Text = mr.rank填充排名dropwon列表的选定项目。在这个例子中,抛出错误的代码行被注释掉,否则抛出这个:“'rank'有一个SelectedValue,它是无效的,因为它不存在于项列表中。 参数名称:值“。

我已经将代码链接到rank.DataTextFiled = mr.rank和rank.DataValueField = mr.rankid.ToString()但是这引发了另一个错误:“DataBinding:'System.Data.DataRowView'不包含属性名为'Star'。“ “明星”是mr.rank的价值。

以下是下拉列表和ods的样子:

<asp:DropDownList runat="server" ID="rank" CssClass="txtfield" DataSourceID="ODCRanks"
    DataTextField="Rank" DataValueField="ID" AppendDataBoundItems="True">
<asp:ListItem Text="--- Select a Rank ---" Value="-1"   />                                            

<asp:ObjectDataSource ID="ODCRanks" runat="server" 
OldValuesParameterFormatString="original_{0}" SelectMethod="GetRanks" 
TypeName="RanksTableAdapters.RankTableAdapter"></asp:ObjectDataSource>

3 个答案:

答案 0 :(得分:1)

您应该尝试将数据列添加到数据表中(ID和Rank是列名),以便绑定数据以进行控制。

答案 1 :(得分:1)

Text属性按值设置。

请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.text.aspx

您似乎拥有与该值关联的文本,并且您希望将其设置为所选项目。我猜这主要是因为你的价值收集绑定了一个名为ID的东西,我认为Star的排名不是ID。

如果Star会在DataTextField中显示为什么,请使用items集合FindByText方法来选择它。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemcollection.findbytext.aspx

实施例

    ListItem li = DropDownList1.Items.FindByText("one");
    if (li != null) li.Selected = true;

如果Star确实是一个ID,那么在尝试选择其中的任何内容之前,请检查该集合是否已完全加载。

答案 2 :(得分:1)

尝试类似

的内容
rank.SelectedIndex = rank.Items.IndexOf(rank.Items.FindByText(mr.rank));