首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

GridView 中动态插入一列,导致 GridView 中该列前面的模板列出错,该怎么解决

2012-01-29 
GridView 中动态插入一列,导致 GridView 中该列前面的模板列出错最近写一个页面,发现一个问题,在GridView

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= "server " Text= "Button " />
</form>


</body>
</html>


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class Default20 : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e )
{
if (!IsPostBack)
{
BoundField b = new BoundField();
b.HeaderText = "代码添加的列 ";
b.DataField = "学生姓名 ";
b.ItemStyle.ForeColor = System.Drawing.Color.Red;
GridView1.Columns.Insert(3, b); //Insert 会出现这种情况,Add 就没问题。
GridView1.DataSource = CreateDataSourceByXianhuiMeng();
GridView1.DataBind();
}
else
{
GridView1.DataSource = CreateDataSourceByXianhuiMeng();
GridView1.DataBind();
}

}
// 计算数据,完全可以从数据看取得
ICollection CreateDataSourceByXianhuiMeng( )
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn( "学生班级 ", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn( "学生姓名 ", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn( "语文 ", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn( "数学 ", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn( "英语 ", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn( "计算机 ", typeof(System.Decimal)));

for (int i = 0 ; i < 8 ; i++)
{
System.Random rd = new System.Random(Environment.TickCount * i); ;
dr = dt.NewRow();
dr[0] = "班级 " + i.ToString() + TextBox1.Text;
dr[1] = "【孟子E章】 " + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
dt.Rows.Add(dr);
}
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}
}

热点排行