簡體   English   中英

ASP.NET:在轉發器中填充一個下拉列表(來自數據庫),並從轉發器數據倉庫中為其分配默認值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM