C# 将Dropdownlist从codebehind添加到gridview列

C# 将Dropdownlist从codebehind添加到gridview列,c#,asp.net,C#,Asp.net,我正在尝试将dropdownlist添加到我的gridview中的列中。我有这样的想法: DataTable dt = new DataTable(); DataColumn dc = new DataColumn(); if (dt.Columns.Count == 0) { dt.Columns.Add("Names", typeof(string)); dt.Columns.Add("Sele

我正在尝试将dropdownlist添加到我的gridview中的列中。我有这样的想法:

DataTable dt = new DataTable();
        DataColumn dc = new DataColumn();

        if (dt.Columns.Count == 0)
        {
            dt.Columns.Add("Names", typeof(string));
            dt.Columns.Add("Selection", typeof(string));

        }

 DropDownList ddlSelection= new DropDownList();

        ddlSelection.Items.Add(new ListItem("one"));
        ddlSelection.Items.Add(new ListItem("two"));


DataRow NewRow = dt.NewRow(); 
NewRow[0] = lblname.Text;
NewRow[1] = ddlSelection.Items;
dt.Rows.Add(NewRow);
我犯了一种错误。有人能帮我吗


谢谢

我认为您无法向DataTable添加控件,请尝试处理gridview的DataBound操作,并在GridView1.rows循环中使用foreachGridviewRow r进行迭代,将控件添加到gridview的任意单元格中

 //edit:    
     protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn();

        if (dt.Columns.Count == 0)
        {
            dt.Columns.Add("Selection", typeof(string));
            dt.Columns.Add("Names", typeof(string));
        }

        DropDownList ddlSelection = new DropDownList();

        ddlSelection.Items.Add(new ListItem("one"));
        ddlSelection.Items.Add(new ListItem("two"));

        for(int i= 0; i < 10; i++)
        {
            DataRow NewRow = dt.NewRow();
            NewRow[1] = "dropdownlist"+i;
            dt.Rows.Add(NewRow);
        }
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    protected void GridView1_DataBound(object sender, EventArgs e)
    {
        foreach (GridViewRow r in GridView1.Rows)
        {
            DropDownList ddlSelection = new DropDownList();

            ddlSelection.Items.Add(new ListItem("one"));
            ddlSelection.Items.Add(new ListItem("two"));
            r.Cells[0].Controls.Add(ddlSelection);
        }
    }

一种简单的方法是,创建一个用户控件来控制所需内容,并将其加载为模板字段。 但每次页面加载时,此模板字段都会清除,因此您需要它来创建每次页面加载

foreach (DataRow dr in dt.Rows)
          {
                int index = dt.Rows.IndexOf(dr);
                 if(index =1)
            {
                TemplateField tF = new TemplateField();
                tF.HeaderText = dr["COLUMN_NAME"].ToString();
                tF.ItemTemplate = LoadTemplate("/xxxxxx.ascx");
                GridView1.Columns.Add(tF);
            }
         }

dt.Columns.AddSelection,typeofstring;我认为这就是问题所在。gridview不显示dropdownlist,它显示控件名称的字符串,如:System.Web.UI.WebControls.ListItemCollection。应该显示控件。如果这样做,您不能添加dropdownlist,您需要创建一个模板字段并将其动态添加到gridview。为什么不在aspx页面中添加dropdown?我想也许可以在codebehind中添加。但你是对的。我可以在前端完成这项工作。在代码隐藏中完成这项工作是可能的,但是看到您正在向DataRow添加控件,那么现在想想如何在GridView中添加控件?您创建了一个模板字段,对吗?因此,您可以创建一个模板字段并动态添加它,但如果没有复杂性或需要,我认为更好或更明智的方法是在aspx页面中进行。我发布了一个我曾经做过的例子。希望它对您有用。这一个有效,但是带有dropdownlist的新列显示在gridview的左侧,在dt.Columns.AddNames,typeofstring;之前;。你知道如何让它消失在右边吗,在我第一列的名字之后?我不知道你想要什么,你是说你想让下拉列表出现在左边?所以只需更改r.Cells[索引到您希望它出现的位置]查看编辑。