GridView 中动态插入一列,导致 GridView 中该列前面的模板列出错
最近写一个页面,发现一个问题,在 GridView 中间插入一列,注意是插入,而不是添加,不管插入的列是什么列,当PostBack回来时,就会出现该列前面的所有模板列都不见了,大家遇到过这种情况吗?有什么好办法?我现在只能用 BoundField 列来显示了。
示例代码:
if (!IsPostBack)
{
BoundField b = new BoundField();
GridView1.Columns.Insert(5, b); //Insert 会出现这种情况,Add 就没问题。
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
else
{
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
//这时候,前面4列中所有的模板列都什么也显示不出来了。
}
查了很久,也没有找到解决办法,谁能告诉我怎么解决?
------解决方案--------------------放在Page_Load也是可以的,下面是完整源代码,你可以试试
<%@ Page Language= "C# " EnableViewState= "false " AutoEventWireup= "true " CodeFile= "Default20.aspx.cs "
Inherits= "Default20 " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head runat= "server ">
<title> 无标题页 </title>
</head>
<body>
<form id= "form1 " runat= "server ">
<asp:GridView ID= "GridView1 " runat= "server " AutoGenerateColumns= "False ">
<Columns>
<asp:TemplateField HeaderText= "模板列姓名 ">
<ItemTemplate>
<%#Eval( "学生姓名 ")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText= "模板列年级 ">
<ItemTemplate>
<%#Eval( "学生班级 ")%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField= "语文 " HeaderText= "语文 " SortExpression= "语文 " />
<asp:TemplateField HeaderText= "模板列计算机 ">
<ItemTemplate>
<%#Eval( "计算机 ")%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField= "数学 " HeaderText= "数学 " SortExpression= "数学 " />
</Columns>
</asp:GridView>
<asp:TextBox ID= "TextBox1 " runat= "server "> 控件的值 </asp:TextBox>
<asp:Button ID= "Button1 " runat= &qu