GridView中列的绑定与显示问题
2009-06-22 15:34
218 查看
不知道大家有没有遇到过这种情况: 当GridView中既有在页面绑定的列又有动态在代码页绑定的列,一但发生PostBack 就会出现列重复的现象。如下:
a.aspx页面中的代码:
a.aspx.cs中的代码:
页面中绑定的是两列CheckBox,后台则是两列数据。运行后的效果:
一切正常。但是当你点击一个复选框后:
看见了吧,其它列出现了重复,而CheckBox列却没有。
原因就在于写在页面上的两列CheckBox 在每次页面unload时去掉,在加载时自动加入;而写在后台代码中的列则会一直存在。
估计你会想:在每次页面load时清空不就行了么。所以我们在代码中加入一段代码:
效果估计你也猜出来了:
是不重复了,但PostBack后那两列没了。那两列是在Page_Load之前绑定上去的,所以一Clear()就没了。
我没想到好的解决办法,只能用最笨的办法来解决了:
每次Page_load的时候把我们之前在后台绑的列给去掉。(就这样问题还不算完!)
所以看来数据的绑定要么全放在页面要么全放在后台代码,要不然问题多多。
不知道各位是怎么处理的,静等高见。
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,后台则是两列数据。运行后的效果:
一切正常。但是当你点击一个复选框后:
看见了吧,其它列出现了重复,而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的时候把我们之前在后台绑的列给去掉。(就这样问题还不算完!)
所以看来数据的绑定要么全放在页面要么全放在后台代码,要不然问题多多。
不知道各位是怎么处理的,静等高见。
相关文章推荐
- Asp.net中在GridView数据绑定事件中改变显示内容要注意的问题
- gridview中使用edit命令显示EditItemTemplateColumn,绑定Listbox的值问题
- GridView中列的绑定与显示问题
- GridView数据绑定时数据源为空时显示表头和"没有记录"
- 解决用<img src="<%# Eval("ShowPhoto")%>"动态绑定图片,发布到IIS上无法显示的问题
- [Android]在ListView嵌套GridView中出现的点击事件处理以及gridview显示不全的问题
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- C#GridView中RadioButton选中显示不正确问题!
- GridView那点事之【如何使用DataView来绑定数据显示到表格中】
- android listview嵌套viewpager,viewpager嵌套gridview,解决内嵌无法显示以及时间冲突的问题
- 关于GridView的无数据显示问题..
- 解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)
- gridview只显示一行的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- GridView设置自动滚动到列表底部导致第一条数据不显示问题处理
- GridView绑定数据库中bit型的数据显示成0和1而不是True和False
- Android应用程序当中GridView显示不同大小图片时Item挤出问题解决办法
- GridView数据源绑定的一个小问题
- 根据Eval()函数绑定的值,来显示GridView中的控件的方法
- 如何让GridView控件在绑定的数据源没有数据时也显示标题