[英]ASP.NET: Populate a dropdown list within a repeater (from database), and assign it a default value from the repeater datascource
我正在使用asp.net中繼器。 在轉發器中,我有一個從數據庫填充的下拉列表。 中繼器中每個項目的每個下拉列表可能具有不同的默認值。 但是當我使用這樣的東西:
<asp:DropDownList ID="NoSaleDropDown" runat="server" Width="446" AppendDataBoundItems="True" Text='<%#Eval("NoSaleReasonDesc") %>'></asp:DropDownList>
我收到此錯誤:'NoSaleDropDown'的SelectedValue無效,因為它在項目列表中不存在。 參數名稱:值
如果使用以下命令,也是如此:SelectedValue ='<%#Eval(“ NoSaleReasonID”)%>'
如果我取出Text ='<%#Eval(“ NoSaleReasonDesc”)%>',則下拉列表中顯示的值是填充列表的查詢中返回的第一項。
這段代碼對於文本框可以正常工作:
<asp:TextBox ID="NoSaleTxtBox" Width="446" runat="server" ReadOnly="true" Text='<%#Eval("NoSaleReasonDesc") %>' ></asp:TextBox></td>--%>
但是,有時需要編輯NoSaleReasonDesc,最好使用下拉列表中的項目。
有人有主意嗎?
在中繼器中嘗試
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource1" DataTextField="ProductName" DataValueField="ProductID">
</asp:DropDownList>
您需要設置DataSourceID,DataTextField,DataValueField
您會得到像我的圖像一樣的結果。 試試吧 : )
我明白了為什么它在.aspx文件中不起作用。 評估SelectedValue時,下拉列表為null,因此列表中沒有相應的值。 我添加了“ NoSaleDropDown.SelectedValue = DataBinder.Eval(e.Item.DataItem,“ NoSaleReasonID”)。ToString();“ 到.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();
}
}
}
您不應直接從.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
作品
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.