C# Asp.net使用下拉菜单创建行并填充它

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肉

因此,我正在创建一个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应用于保存最少的数据量。我将使用会话变量。。为什么要用这么多潜在的数据让你的页面停滞不前。。我完全理解你想做什么。。我想知道
中继器是否更适合您的动态情况。。