ASP.NET:在转发器(从数据库)中填充下拉列表,并从转发器数据源中为其分配默认值

时间:2014-10-30 15:32:17

标签: c# asp.net drop-down-menu repeater

我正在使用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,最好使用下拉列表中的项目进行编辑。

有没有人有想法?

3 个答案:

答案 0 :(得分:1)

在中继器中尝试此操作

<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource1" DataTextField="ProductName" DataValueField="ProductID">
            </asp:DropDownList>

您需要设置DataSourceID,DataTextField,DataValueField

你会得到像我的形象一样的结果。试试吧:))

enter image description here

答案 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

作品