6

在 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");
    }
  }
}
4

6 回答 6

10

您可以使用 DataTextField 和 DataValueField 属性。

ListControl.DataTextField 属性

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

或者一次添加一个 ListItem。

ASP.Net DropDownList DataTextField 多列

于 2012-10-19T17:36:13.567 回答
2

所有数据绑定控件都可以绑定到 DataTable 和任何实现 IEnumerable 的对象(例如字符串数组)。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>
于 2012-10-19T17:53:05.080 回答
2

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)orString.Split(":")(1)来获取第一个和第二个 ListItem 值。

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

于 2012-10-19T18:28:02.957 回答
2

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;
  }
于 2013-12-09T18:54:47.013 回答
0
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="StringValue" 
            DataValueField="CurrencyValue">
        </asp:DropDownList>



//C#:

DropDownList1.DataSource = drpdt; 
DropDownList1.DataBind(); 
于 2012-10-20T05:00:37.693 回答
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;
    }
}

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

于 2021-01-12T21:59:56.847 回答