日期:2014-05-18  浏览次数:21160 次

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