GridView中列的绑定与显示问题

本文探讨了ASP.NET中GridView控件在同时使用页面绑定列和代码页动态绑定列时出现的列重复现象。通过分析问题产生的原因及尝试不同的解决方案,最终提出了一种可行的方法。

不知道大家有没有遇到过这种情况: 当GridView中既有在页面绑定的列又有动态在代码页绑定的列,一但发生PostBack 就会出现列重复的现象。如下:

a.aspx页面中的代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ondatabound="GridView1_DataBound" onrowdatabound="GridView1_RowDataBound"> <Columns > <asp:TemplateField > <HeaderTemplate>显示</HeaderTemplate> <ItemTemplate > <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack ="true" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField > <HeaderTemplate>锁定</HeaderTemplate> <ItemTemplate > <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack ="true" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>

a.aspx.cs中的代码:

public partial class test_test16_call_procedure : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { boundColumToGrid(); } private int boundColumToGrid() { Titles_names tn = new Titles_names("FMTCS10001", 1); GridView1.DataSource = tn.Dds; BoundField bc1 = new BoundField(); BoundField bc2 = new BoundField(); BoundField bc3 = new BoundField(); BoundField bc4 = new BoundField(); bc1.HeaderText = "显示名称"; bc1.DataField = "clm_cap"; GridView1.Columns.Add(bc1); bc2.HeaderText = "宽度"; bc2.DataField = "clm_width"; GridView1.Columns.Add(bc2); GridView1.DataBind(); return 1; } }

页面中绑定的是两列CheckBox,后台则是两列数据。运行后的效果:

图1

一切正常。但是当你点击一个复选框后:

图2

看见了吧,其它列出现了重复,而CheckBox列却没有。

原因就在于写在页面上的两列CheckBox 在每次页面unload时去掉,在加载时自动加入;而写在后台代码中的列则会一直存在。

估计你会想:在每次页面load时清空不就行了么。所以我们在代码中加入一段代码:

protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { GridView1.Columns.Clear(); } boundColumToGrid(); }

效果估计你也猜出来了:

图片

是不重复了,但PostBack后那两列没了。那两列是在Page_Load之前绑定上去的,所以一Clear()就没了。

我没想到好的解决办法,只能用最笨的办法来解决了:

protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { removeColum(); } boundColumToGrid(); } private void removeColum() { GridView1.Columns.RemoveAt(2); GridView1.Columns.RemoveAt(2); }

每次Page_load的时候把我们之前在后台绑的列给去掉。(就这样问题还不算完!)

所以看来数据的绑定要么全放在页面要么全放在后台代码,要不然问题多多。

不知道各位是怎么处理的,静等高见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值