如何动态填写自定义下拉列表?

时间:2014-02-17 14:01:50

标签: c# asp.net asp.net-mvc indexing

我的asp:DropDownList中有一个asp:GridView,以帮助用户将数据上传到SQL Server 2012

<asp:TemplateField ItemStyle-Width = "100px"  HeaderText = "Site">
        <ItemTemplate>
            <asp:Label ID="lblSiteID" runat="server" Text='<%# Eval("SiteID")%>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:DropDownList ID="ddlSite" SelectedValue='<%# Bind("SiteID") %>' Text='<%# Bind("SiteID") %>' runat="server">
                    <asp:ListItem Value= "1" Text="Google" />
                    <asp:ListItem Value= "2" Text="Yahoo" />                        
            </asp:DropDownList>
        </EditItemTemplate>  
        <FooterTemplate>
            <asp:DropDownList ID="ddlSite" runat="server">
                <asp:ListItem>Google</asp:ListItem>
                <asp:ListItem>Yahoo</asp:ListItem>
            </asp:DropDownList>
        </FooterTemplate> 
        <ItemStyle Width="100px" />
    </asp:TemplateField>

SiteID是数据库中的一个int,它是如何在代码隐藏中定义的:

private int numGoogle = 1;
private int numYahoo = 2;


//on insert and update
string SiteID = ((DropDownList)gvMainView.FooterRow.FindControl("ddlSite")).Text;
switch (SiteID)
{
    case "Inpatient Measures":
        SiteID = numGoogle.ToString();
        break;
    case "Outpatient Measures":
        SiteID = numYahoo.ToString();
        break;
}

//on Edit
switch (SiteID)
{
    string SiteID = ((DropDownList)gvMainView.FooterRow.FindControl("ddlSite")).SelectedValue;
    case "1":
        SiteID = "Google";
        break;
    case "2":
        SiteID = "Yahoo";
        break;
}

我的目标是使此应用程序完全动态化,以便客户端可以将value和文本本身添加到asp:dropdownlist。我已经在我的数据库中为此创建了一个表。我知道如何查询数据库以获取numSiteName,并将其用作valuetext。我需要知道如何填充asp:DropDownList一旦我拥有它们,以便变量不像现在那样硬编码。

1 个答案:

答案 0 :(得分:2)

您可以设置下拉列表DataSource属性,然后调用DataBind();将控件绑定到该数据。

确保提供DataValueFieldDataTextField,以便控件知道每个列表项的文本和值属性使用的内容,例如:

ddlSite.DataSource = foo;
ddlSite.DataTextField = "FOO";
ddlSite.DataValueField = "foo_ID";

ddlSite.DataBind();