Asp.net動態添加GridView列,列中的控件可以任意指定一個或多個。
比使用一般的Table控件,更加的靈活,且能夠很多的支持數據的綁定操作。
下面給出了一個示例。
1. 首先是指定動態要添加的列
2.綁定數據
3.獲取GridView中的值。
代碼如下:
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Other_TestGridView : System.Web.UI.Page
{
public class GenericItem : ITemplate
{
private string column;
public GenericItem(string column)
{
this.column = column;
}
public void InstantiateIn(Control container)
{
//TextBox txt = new TextBox();
//txt.Width = Unit.Pixel(15);
//txt.DataBinding += new EventHandler(this.BindData);
DropDownList ddl = new DropDownList();
ddl.DataBinding += new EventHandler(this.BindData);
container.Controls.Add(ddl);
HiddenField HF = new HiddenField();
HF.Value = column;
container.Controls.Add(HF);
}
public void BindData(object sender, EventArgs e)
{
//TextBox txt = (TextBox)sender;
//txt.Text = "▲";
DropDownList ddl = (DropDownList)sender;
ddl.Items.Add(new ListItem("○"));
ddl.Items.Add(new ListItem("▲"));
ddl.Items.Add(new ListItem("●"));
}
}
protected void GridView1_Init(object sender, EventArgs e)
{
addGridColumns();
}
private void addGridColumns()
{
for(int i = 0; i < 10; i++)
{
TemplateField templateField = new TemplateField();
templateField.HeaderText = "標題人名"+i.ToString();
templateField.ItemTemplate = new GenericItem((10+ i).ToString());
GridView1.Columns.Add(templateField);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("work", typeof(string));
dt.Rows.Add(new object[] { "工作描述1" });
dt.Rows.Add(new object[] { "工作描述2" });
dt.Rows.Add(new object[] { "工作描述3" });
GridView1.DataSource = dt;
GridView1.DataBind(http://www.amjmh.com);
}
}
//獲取內容
protected void Button1_Click(object sender, EventArgs e)
{
string content = "";
foreach(GridViewRow row in GridView1.Rows)
{
content += row.Cells[0].Text;
for(int i = 1; i < row.Cells.Count; i++)
{
// content += ((TextBox)(row.Cells[i].Controls[0])).Text;
content += ((DropDownList)(row.Cells[i].Controls[0])).SelectedItem.Text;
}
content += "<br>";
}
// MyClientScript.ygJScript.Alert(content, this);
Label1.Text = content;
}
}
---------------------