ASP.NET下拉列表绑定不起作用

时间:2016-11-22 15:21:52

标签: c# asp.net data-binding dropdown

在ASP.NET中,我试图将下拉列表的文本与数据库中的数据绑定。在列表中,我获得了用于该特定列的所有正确值,但显示的值与数据库中的值不对应。对于值B,值正确显示,但对于其他值,它显示值A. 有人作为一个想法吗?

修改

DropDownList用作Gridview中的一列,我尝试以多种方式添加值。对于价值'Lijndienst'的列,它工作正常,但对于所有其他它只显示'绿色运输'

 <asp:TemplateField HeaderText="Transport">
        <ItemTemplate>
            <asp:Label ID="lblTransport" runat="server" Text='<%# Bind("Transport") %>' Visible="false" ></asp:Label>
            <asp:DropDownList ID="ddlTransport" runat="server" Width="150px" Height="20px" >
                <%--<asp:ListItem Text="Geen transport"></asp:ListItem>
                <asp:ListItem Text="Lijndienst"></asp:ListItem>
                <asp:ListItem Text="Intercity"></asp:ListItem>
                <asp:ListItem Text="Firma Piping"></asp:ListItem>
                <asp:ListItem Text="Firma E&I"></asp:ListItem>
                <asp:ListItem Text="Zwaar"></asp:ListItem>--%>
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>

 DropDownList ddlTransport = (e.Row.FindControl("ddlTransport") as DropDownList);
        Label lblTransport = (e.Row.FindControl("lblTransport") as Label);
        ddlTransport.DataSource = GetData("SELECT Transport FROM Transport", "Transport");
        ddlTransport.DataTextField = "Transport";
        ddlTransport.DataValueField = "Transport";
        ddlTransport.DataBind();
        ddlTransport.SelectedValue = lblTransport.Text;

1 个答案:

答案 0 :(得分:0)

假设您的数据位于数据表中,请尝试此

var dt = new DataTable();
var ddl = new DropDownList(); //represents your drop down list 

foreach (DataRow row in dt.Rows)
{
    var li = new ListItem();
    li.Text = row["text to show"].ToString();
    li.Value = row["value of dropdown item"].ToString();
    ddl.Items.Add(li);
}

在澄清后使用相关代码进行回答编辑

所以,这是我拥有的数据网格,并且在其中有一个下拉列表项,这也是一个有效的例子。虽然asnswer是VB,它应该足以让你使用

<asp:TemplateColumn HeaderText="Switching to Product" HeaderStyle-CssClass="centre" ItemStyle-CssClass="centre">
<ItemTemplate>
    <asp:DropDownList runat="server" Width="200px" CssClass="centre ddlMoveToProduct" ID="ddlProduct" AutoPostBack="True" OnSelectedIndexChanged="ddlProduct_Change">
    </asp:DropDownList>
</ItemTemplate>

然后你想在你的代码中运行它

 For Each item As DataGridItem In dgSuitableSwitch.Items
        Dim ddlProduct As DropDownList = DirectCast(item.FindControl("ddlProduct"), DropDownList)

        With ddlProduct
            .Items.Add("-- Select Product")
            .Items.Add("Premium Investments")
            .Items.Add("Growth Portfolio (OEIC)")
            .Items.Add("Income Portfolio (OEIC)")
            .Items.Add("Index Linked Savings Bond")
            .Items.Add("Fixed Term Investment")
            .Items.Add("Cash")
        End With
    Next

如果您想要一个C#示例,请告诉我并对其进行编码\将其转换为

编辑2

继承了c#版本,文本和值都是相同的,但是在所有片段中都有足够的代码可以添加带有文本和值的新列表项

foreach (DataGridItem item in dgSuitableSwitch.Items)
{
    DropDownList ddlProduct = (DropDownList)item.FindControl("ddlSSProduct");

    ddlProduct.Items.Add("-- Select Product");
    ddlProduct.Items.Add("Premium Investments");
    ddlProduct.Items.Add("Growth Portfolio (OEIC)");
    ddlProduct.Items.Add("Income Portfolio (OEIC)");
    ddlProduct.Items.Add("Index Linked Savings Bond");
    ddlProduct.Items.Add("Fixed Term Investment");
    ddlProduct.Items.Add("Cash");
}

编辑3

将项目添加到下拉列表时,请使用与此类似的代码

ddl.Items.Add(new ListItem {Text = "your text here", Value = "your value here"})