我正在使用asp.net转发器。在转发器中,我有一个从数据库中填充的下拉列表。转发器中每个项目的每个下拉列表可能具有不同的默认值。但是当我使用这样的东西时:
<asp:DropDownList ID="NoSaleDropDown" runat="server" Width="446" AppendDataBoundItems="True" Text='<%#Eval("NoSaleReasonDesc") %>'></asp:DropDownList>
我收到此错误:'NoSaleDropDown'的SelectedValue无效,因为它在项目列表中不存在。 参数名称:值
如果我使用,也是如此:SelectedValue ='&lt;%#Eval(“NoSaleReasonID”)%&gt;'
如果我取出Text ='&lt;%#Eval(“NoSaleReasonDesc”)%&gt;',则下拉列表中显示的值是填充列表的查询中返回的第一个项目。
此代码适用于文本框:
<asp:TextBox ID="NoSaleTxtBox" Width="446" runat="server" ReadOnly="true" Text='<%#Eval("NoSaleReasonDesc") %>' ></asp:TextBox></td>--%>
但是,有时需要编辑NoSaleReasonDesc,最好使用下拉列表中的项目进行编辑。
有没有人有想法?
答案 0 :(得分:1)
在中继器中尝试此操作
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource1" DataTextField="ProductName" DataValueField="ProductID">
</asp:DropDownList>
您需要设置DataSourceID,DataTextField,DataValueField
你会得到像我的形象一样的结果。试试吧:))
答案 1 :(得分:1)
我明白为什么它在.aspx文件中不起作用。当评估SelectedValue时,下拉列表为空,因此它在列表中没有相应的值。我添加了#34; NoSaleDropDown.SelectedValue = DataBinder.Eval(e.Item.DataItem,&#34; NoSaleReasonID&#34;)。ToString();&#34;到.aspx.cs文件中的下拉列表事件处理程序。这是整个事件处理程序:
protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DropDownList NoSaleDropDown = (DropDownList)e.Item.FindControl("NoSaleDropDown");
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string sConnection2 = ConfigurationManager.ConnectionStrings["DevConn"].ConnectionString;
SqlConnection dbConn2 = new SqlConnection(sConnection2);
dbConn2.Open();
string sqlString2 = "SELECT NoSaleReasonID, NoSaleReasonDesc FROM M_NoSaleReason";
SqlCommand command2 = new SqlCommand();
command2.CommandText = sqlString2;
command2.Connection = dbConn2;
SqlDataAdapter DataAdapter2 = new SqlDataAdapter();
DataAdapter2.SelectCommand = command2;
DataTable dt2 = new DataTable();
DataAdapter2.Fill(dt2);
if (NoSaleDropDown != null)
{
NoSaleDropDown.DataTextField = "NoSaleReasonDesc";
NoSaleDropDown.DataValueField = "NoSaleReasonID";
NoSaleDropDown.DataSource = dt2;
NoSaleDropDown.DataBind();
NoSaleDropDown.SelectedValue = DataBinder.Eval(e.Item.DataItem, "NoSaleReasonID").ToString();
}
}
}
答案 2 :(得分:0)
您不应直接从.aspx文件设置所选值。而且也不是改变文本。 最好使用值(应该是唯一的)设置选择的项目
在.apsx:
<asp:DropDownList ID="NoSaleDropDown"
runat="server" Width="446" AppendDataBoundItems="True"></asp:DropDownList>
<。>在.aspx.vb中(或类似于C#):
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
NoSaleDropDown.Items.Add(New ListItem("one", 1))
NoSaleDropDown.Items.Add(New ListItem("two", 2))
NoSaleDropDown.Items.Add(New ListItem("three", 3))
End Sub
Public NoSaleReasonId As Integer = 2
Protected Sub NoSaleDropDown_Load(sender As Object, e As EventArgs) Handles NoSaleDropDown.Load
NoSaleDropDown.SelectedValue= NoSaleReasonId
End Sub
作品