在asp.net中填充dropdownlist的最简单方法(代码隐藏)?

时间:2012-10-19 17:21:42

标签: asp.net sql c#-4.0

在asp.net(代码隐藏)中填充下拉列表的最简单方法是什么?我刚学会了如何使用数据表和数据适配器填充网格。可以使用数据表和数据适配器来填充dropdonlist吗? 这是我的尝试..

public partial class page3 : System.Web.UI.Page
{
  public DataTable fillmydropdownlist()
  {
     DataTable drpdt = new DataTable();
     string q = "select flightdate from flightdetails";
     SqlCommand cmd = new SqlCommand(q,con);
     try
     {
         SqlDataAdapter da2 = new SqlDataAdapter(cmd);
     }
     catch { }
     return drpdt;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
    dbOperation dbo = new dbOperation();
    DataTable dt = new DataTable();
    dt = dbo.fillmydropdownlist();
    DataTable drpdt= new DataTable();

    if (dt.Rows.Count > 0)
    {
        DropDownList1.DataSource = drpdt;
        DropDownList1.DataBind();
    }
    else
    {
        Response.Write("No Data");
    }
  }
}

6 个答案:

答案 0 :(得分:7)

您可以使用DataTextField和DataValueField属性。

ListControl.DataTextField Property

DropDownList1.DataSource = drpdt; 
DropDownList1.DataTextField="StringValue";
DropDownList1.DataValueField="CurrencyValue";
DropDownList1.DataBind(); 

或者一次添加一个ListItem。

ASP.Net DropDownList DataTextField Multiple Columns

答案 1 :(得分:2)

所有数据绑定控件都可以绑定到DataTable和Implements IEnumerable的任何对象(例如String of String)。 DropdownList是一个数据绑定控件,所以答案是肯定的。

if (dt.Rows.Count > 0)
{
    DropDownList1.DataTextField = "FlightDescription";
    DropDownList1.DataValueField = "FlightID";
    DropDownList1.DataSource = drpdt;
    DropDownList1.DataBind();
}

您还可以从MarkUp

设置DataXXXField属性
<asp:DropdownList ID="DropDownList1" runat="server" 
                  DataTextField="FlightDescription" DataValueField="FlightID">
</asp:DropdownList>

答案 2 :(得分:1)

Win和codingbiz建议的解决方案是最简单的,但仅适用于最简单的方案。并非每个DropDown都需要这样绑定。有时我会有一些实例,我需要将两个(或更多)值绑定到Listitem,这导致我通过迭代DataTable行来做类似于你的例子所做的事情,而是做... ...

foreach (DataRow dr in dt.Rows) {
    DropDownList1.Items.Add(new ListItem(dr["flightdate"], dr["flightnum"] + ":" + dr["flightcarrier"]));
}

稍后我可以执行String.Split(":")(0)String.Split(":")(1)来获取第一个和第二个ListItem值。

总而言之,这实际上取决于您的需求。

答案 3 :(得分:1)

Moojjoo的建议---

  private string FillBizNameCountyDdl()
    {
        string returnText;
        string nameAndCounty;
        string id;


        try
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand("Select *  FROM [tbl_name_county_web_search] ORDER BY main", conn))
                {
                    cmd.CommandType = CommandType.Text;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                nameAndCounty = reader["main"].ToString();
                                id = reader["id"].ToString();
                                ddlBizNameAndCounty.Items.Add(new ListItem(nameAndCounty, provId));                  
                            }
                        }                            
                    }
                }
            }
        }
        catch (Exception ex)
        {
            return ex.Message.Trim();
        }
        returnText = "Success";
        ddlBizNameAndCounty.Items.Insert(0, new ListItem("--Select Provider--"));
        ddlBizNameAndCounty.DataBind();
        return returnText;
  }

答案 4 :(得分:0)

<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="StringValue" 
            DataValueField="CurrencyValue">
        </asp:DropDownList>



//C#:

DropDownList1.DataSource = drpdt; 
DropDownList1.DataBind(); 

答案 5 :(得分:0)

这对于后面的代码来说很简单。

private void Page_Init(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ddlProductID.DataSource = ProductsDB.GetProductsForDDL;
        ddlProductID.DataBind();
    }
}

您的 DropDownList 在页面上可能看起来像这样。

<asp:DropDownList ID="ddlProductID" runat="server" AppendDataBoundItems="True" CssClass="DropDown" DataValueField="ProductID" DataTextField="Product" ViewStateMode="Enabled">
                                                                <asp:ListItem Value="">Select</asp:ListItem>
                                                            </asp:DropDownList>

也许可以在这样的类中创建一些业务对象

public class ProductInfo()
{
    public ProductInfo() : base()
    {
    }

    public Int32 ProductID { get; set; } = 0;
    public string Product { get; set; } = string.Empty;
}

使用静态方法编写另一个类,该类返回类似于下面的列表,但使用 ADO.NET(DataReader 和存储过程)而不是企业库。如果有兴趣,我会改进我的答案。

public class ProductsDB()
{
    public static List<ProductInfo> GetProductsForDDL()
    {
        List<ProductInfo> objs = new List<ProductInfo>();
        Database db = new DatabaseProviderFactory().CreateDefault;
    
        using (DbCommand cmd = db.GetStoredProcCommand("SYSTEM_Products_DropDownList"))
        {
            using (IDataReader dr = db.ExecuteReader(cmd))
            {
                while (dr.Read())
                    objs.Add(new ProductInfo(Convert.ToInt32(dr("ProductID")), (string)IIf(IsDBNull(dr("Product")), "", dr("Product"))));
            }
        }
    
        return objs;
    }
}

这将使您能够在应用程序的任何页面上列出产品,而无需复制和粘贴大量代码。