【问题标题】:Dropdown List will not populate下拉列表不会填充
【发布时间】:2011-12-05 21:32:21
【问题描述】:

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

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 行填充排名下拉列表的选定项目。在这个例子中,抛出错误的代码行被注释掉,否则它抛出这个:“'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>

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

    【讨论】:

    • agian,不确定您的意思。 ID 和 rank 是数据库中的列,但我猜这不是你的意思......
    【解决方案2】:

    Text 属性按值设置它。

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

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

    如果 Star 将在 DataTextField 中显示为某物,请使用项目集合 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,则在尝试选择其中的任何内容之前检查集合是否已完全加载。

    【讨论】:

    • 我也尝试过(rank.selectedItem = mr.rank)错误“...无法分配 - 只读值”。您建议的链接实际上并没有太多意义。不知道如何将其与代码中发生的事情联系起来。
    • 我没有说要设置 SelectedItem。下拉列表是否填充?如果是这样,请查看网页的源代码并将生成的 HTML 作为选择元素发布。
    • 这里是来自 html 的 ddl:
    【解决方案3】:

    试试类似的东西

    rank.SelectedIndex = rank.Items.IndexOf(rank.Items.FindByText(mr.rank));
    

    【讨论】:

    • 我试过了,得到“表 'MemberInfo' 中列 'rank' 的值是 DBNull。”
    • 嗯,这就是你的答案:) 你不能使用空值来填充排名下拉列表的选定项目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2015-03-14
    • 2015-01-20
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多