为GridView添加模板列
public class GridViewTemplate : ITemplate
{
private string controlId = null;
private string dataField = null;
private Type type;
![]()
public GridViewTemplate(string controlId, Type type, string dataField)
{
this.controlId = controlId;
this.type = type;
this.dataField = dataField;
}
![]()
public void InstantiateIn(System.Web.UI.Control container)
{
switch (type.FullName)
{
case ("System.Web.UI.WebControls.Label"):
Label label = new Label();
label.ID = controlId;
label.DataBinding += new EventHandler(control_DataBinding);
container.Controls.Add(label);
break;
case ("System.Web.UI.WebControls.TextBox"):
TextBox textBox = new TextBox();
textBox.ID = controlId;
textBox.DataBinding += new EventHandler(control_DataBinding);
container.Controls.Add(textBox);
break;
default:
break;
}
}
private void control_DataBinding(object sender, EventArgs e)
{
GridViewRow container;
switch (type.FullName)
{
case ("System.Web.UI.WebControls.Label"):
Label label = (Label)sender;
container = (GridViewRow)label.NamingContainer;
label.Text = ((DataRowView)container.DataItem)[dataField].ToString();
break;
case ("System.Web.UI.WebControls.TextBox"):
TextBox textBox = (TextBox)sender;
container = (GridViewRow)textBox.NamingContainer;
textBox.Text = ((DataRowView)container.DataItem)[dataField].ToString();
break;
default:
break;
}
}
}
通过下面的代码调用上面的类
protected void GenerateGridViewColumns()
{
GridView gridView = testGridView;
![]()
TemplateField templateField = new TemplateField();
![]()
templateField.ShowHeader = true;
![]()
templateField.HeaderText = "Id";
![]()
templateField.ItemTemplate = new GridViewTemplate("idLabel", typeof(Label), "Id");
![]()
gridView.Columns.Add(templateField);
![]()
templateField = new TemplateField();
![]()
templateField.ShowHeader = true;
![]()
templateField.HeaderText = "Text";
![]()
templateField.ItemTemplate = new GridViewTemplate("textTextBox", typeof(TextBox), "Text");
![]()
gridView.Columns.Add(templateField);
![]()
gridView.DataSource = CreateDataSource();
![]()
gridView.DataBind();
}
CreateDataSource返回的是一个DataView,
我试着给gridView的DataSource返回一个List泛型,比如List<GlTreeInfo>,但编译无法通过:
((DataRowView)container.DataItem)[dataField]中的DataItem是GlTreeInfo类,无法 type to DataRowView
{
private string controlId = null;
private string dataField = null;
private Type type;
public GridViewTemplate(string controlId, Type type, string dataField)
{
this.controlId = controlId;
this.type = type;
this.dataField = dataField;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (type.FullName)
{
case ("System.Web.UI.WebControls.Label"):
Label label = new Label();
label.ID = controlId;
label.DataBinding += new EventHandler(control_DataBinding);
container.Controls.Add(label);
break;
case ("System.Web.UI.WebControls.TextBox"):
TextBox textBox = new TextBox();
textBox.ID = controlId;
textBox.DataBinding += new EventHandler(control_DataBinding);
container.Controls.Add(textBox);
break;
default:
break;
}
}
private void control_DataBinding(object sender, EventArgs e)
{
GridViewRow container;
switch (type.FullName)
{
case ("System.Web.UI.WebControls.Label"):
Label label = (Label)sender;
container = (GridViewRow)label.NamingContainer;
label.Text = ((DataRowView)container.DataItem)[dataField].ToString();
break;
case ("System.Web.UI.WebControls.TextBox"):
TextBox textBox = (TextBox)sender;
container = (GridViewRow)textBox.NamingContainer;
textBox.Text = ((DataRowView)container.DataItem)[dataField].ToString();
break;
default:
break;
}
}
} 通过下面的代码调用上面的类
protected void GenerateGridViewColumns()
{
GridView gridView = testGridView;
TemplateField templateField = new TemplateField();
templateField.ShowHeader = true;
templateField.HeaderText = "Id";
templateField.ItemTemplate = new GridViewTemplate("idLabel", typeof(Label), "Id");
gridView.Columns.Add(templateField);
templateField = new TemplateField();
templateField.ShowHeader = true;
templateField.HeaderText = "Text";
templateField.ItemTemplate = new GridViewTemplate("textTextBox", typeof(TextBox), "Text");
gridView.Columns.Add(templateField);
gridView.DataSource = CreateDataSource();
gridView.DataBind();
}CreateDataSource返回的是一个DataView,
我试着给gridView的DataSource返回一个List泛型,比如List<GlTreeInfo>,但编译无法通过:
((DataRowView)container.DataItem)[dataField]中的DataItem是GlTreeInfo类,无法 type to DataRowView
