C# Asp.net使用下拉菜单创建行并填充它
因此,我正在创建一个asp.net项目,遇到了一个无法解决的问题 我有一个gridview,其中有下拉列表。我正在尝试使用它,以便当页面加载时,它运行一个sql查询并获取reults(标题)。然后,它为每个结果创建一个新的网格行,放入下拉框,然后在下拉框中选择项目 比如说-- SQL查询从oci_项目中选择标题,其中id='42'这将导致11 我想让它创建11行。每个下拉列表中都有一个下拉列表,然后每个下拉列表中都有一个结果的标题 所以 --DD——(Bobs汉堡店) --DD2——(Bobs肉类) 等等 我有它目前正在创建下拉列表的基础上的结果,但我不能让他们填充 我的代码如下C# Asp.net使用下拉菜单创建行并填充它,c#,asp.net,.net,C#,Asp.net,.net,因此,我正在创建一个asp.net项目,遇到了一个无法解决的问题 我有一个gridview,其中有下拉列表。我正在尝试使用它,以便当页面加载时,它运行一个sql查询并获取reults(标题)。然后,它为每个结果创建一个新的网格行,放入下拉框,然后在下拉框中选择项目 比如说-- SQL查询从oci_项目中选择标题,其中id='42'这将导致11 我想让它创建11行。每个下拉列表中都有一个下拉列表,然后每个下拉列表中都有一个结果的标题 所以 --DD——(Bobs汉堡店) --DD2——(Bobs肉
protected void BindDepartments(params ListControl[] controls)
{
SqlConnection sqlCon = new SqlConnection(WebConfigurationManager.ConnectionStrings["TimeClock"].ConnectionString);
try
{
DataTable dt = new DataTable();
using (sqlCon)
{
using (SqlCommand cmd = new SqlCommand("select title from oci_project where client_id='42'", sqlCon))
{
cmd.CommandType = CommandType.Text;
sqlCon.Open();
using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
{
adp.Fill(dt);
foreach (DataRow projectdata in dt.Rows)
{
addrecordset();
}
if (dt.Rows.Count > 0)
{
foreach (ListControl ctrl in controls)
{
ctrl.Items.Add("test");
foreach (DataRow dtRow in dt.Rows)
{
//
ctrl.Items.Add(new ListItem(dtRow["title"].ToString()));
}
if (ctrl.Items.Count > 0)
{
//Insert "-select-" at the first position in dropdownlist
ctrl.Items.Insert(0, new ListItem("-Select-", "0"));
}
else
{
//Insert "-No data-" at the first position in dropdownlist
ctrl.Items.Insert(0, new ListItem("-No Data-", "0"));
}
}
}
}
sqlCon.Close();
}
}
}
catch (Exception ex)
{
Response.Write("Error:" + ex.Message.ToString());
}
}
protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ProjectDDL");
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["TimeClock"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT title FROM oci_project where client_id ='42'", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
ddl.Items.Add(dr["title"].ToString());
ddl.SelectedValue = dr["title"].ToString();
}
}
}
你需要这样的东西
foreach (GridViewRow row in GridView.Rows)
{
ctrl.Items.Add(new ListItem(row.Cells[0].Text));
}
您可以加载ddl来代替我使用字符串someStrValue的位置。Id建议合并LINQ来访问您的数据源,并将集合存储到列表中,同时将Javascript框架合并到您的应用程序中(即jQuery)。然后可以枚举集合并动态创建一个包含行和列的JQuery菜单,即UL和LI
这将为您节省大量的时间以及性能成本和可维护性。您在代码中的何处调用
DataBind()
方法,例如ctrl.DataBind();`理论上,我认为在发出ctrl.DataBind()
之后,应该调用ctrl
的Insert方法,因为您使用的是,所以不需要显式调用sqlCon.Close()代码>正在addrecordset()处调用我的数据绑定。我将编辑我的帖子以显示代码。顺便问一下,下拉列表中通常有多少条记录。。我个人会更改(DataTable)视图状态[“CurrentTable”]
使用会话变量,如(DataTable)会话[“CurrentTable”]代码>我还将在类的顶部设置一个公共静态数据表dt{get;set;}
。使用if(!IsPostBack){}else{do the binding of the drop down}
您发出的问题实际上看起来是PostBack
问题。在页面加载中放置一个断点,当您希望看到加载/绑定的下拉列表时,您应该能够检查ddl.Items.count它们有所不同,但数据库中有大约2000个项目需要填充到下拉列表中。但是,下拉列表需要为记录选择一个。对于isntance,如果返回了11条记录,则需要创建11个下拉列表,从数据库中完全填充,并且必须将每个下拉列表选择为11个结果中的一个。2000
items ViewState应用于保存最少的数据量。我将使用会话变量。。为什么要用这么多潜在的数据让你的页面停滞不前。。我完全理解你想做什么。。我想知道中继器是否更适合您的动态情况。。