在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");
}
}
}
答案 0 :(得分:7)
您可以使用DataTextField和DataValueField属性。
ListControl.DataTextField Property
DropDownList1.DataSource = drpdt;
DropDownList1.DataTextField="StringValue";
DropDownList1.DataValueField="CurrencyValue";
DropDownList1.DataBind();
或者一次添加一个ListItem。
答案 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;
}
}
这将使您能够在应用程序的任何页面上列出产品,而无需复制和粘贴大量代码。