如何在代码后面的gridview中添加DropDownList
列?在我的情况下,想要添加一个名为Employer
的下拉列表。我已成功添加了一个名为Name
的字符串列,其中包含以下代码:
DataTable dt = new DataTable();
DropDownList drp = new DropDownList();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Employer", typeof(DropDownList));
drp.Items.Add(new ListItem("test", "0"));
foreach (SPListItem item in queryResults)
{
dr["Name"] = item["iv3h"].ToString();
dr["Employer"] = drp;
dt.Rows.Add(dr);
}
BoundField bf = new BoundField();
bf.DataField = "Name";
bf.HeaderText = "Name";
bf.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
bf.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
GridViewEarningLine.Columns.Add(bf);
Name
列效果很好但Employer
在每行System.Web.UI.WebControls.DropDownList
中都显示此消息。
我无法访问ASPX页面因此我无法使用TemplateField
答案 0 :(得分:2)
在代码隐藏中将DropDownList动态添加到GridView:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Row)
{
DropDownList ddl = new DropDownList();
ddl.AutoPostBack = true;
// add index changed events to dropdownlists
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
e.Row.Cells[1].Controls.Add(ddl); // add dropdownlist to column two
}
}
现在已经为所有GridView行创建了DropDownLists,您可以在GridView的RowDataBound
事件中绑定它。
答案 1 :(得分:2)
按照您之前的代码开始发布此帖子,这是您可以关注的更新版本,应该为您提供。 (再次,按照你的语法)
DataTable dt = new DataTable();
DropDownList drp = new DropDownList();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Employer", typeof(DropDownList));
drp.Items.Add(new ListItem("test", "0"));
foreach (SPListItem item in queryResults)
{
dr["Name"] = item["iv3h"].ToString();
//dr["Employer"] = drp; --object being added when you need the control.
dt.Rows.Add(dr);
}
BoundField bf = new BoundField();
bf.DataField = "Name";
bf.HeaderText = "Name";
bf.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
bf.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
GridViewEarningLine.Columns.Add(bf);
//Here is how you can add the control with the contents as needed.
foreach (GridViewRow row in GridViewEarningLine.Rows)
{
drp = new DropDownList();
drp.DataSource = list;
drp.DataBind();
drp.SelectedIndex = -1;
row.Cells[1].Controls.Add(drp);
}
你可以调整一下,因为我可能已经错过了上述情景。
您需要查看其中的数据/值。 (我的错误陈述)
这里显示您需要添加控件,控件显示其中的数据/值。 (如果这种情况发生在winforms中,这有点不同)。
希望有所帮助。
答案 2 :(得分:0)
您在雇主看到“system.web ...”的原因是DropDownList
是对象,您需要查看其中的数据/值。
为该列添加一些定义应该可以解决问题。
以前的工作示例是单独查看该列。