我不确定如何纠正以下问题。我有一个具有对象数据源的下拉列表。然后在代码中有一个像这样的方法
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>
答案 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));