博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决
阅读量:6809 次
发布时间:2019-06-26

本文共 1423 字,大约阅读时间需要 4 分钟。

直入主题,首先声明,这个问题是无法解决的,特此在这说明

一、如何动态添加列,如下:

在页面重写OnInit事件,至于为什么要在这个事件写,根据页面的声明周期和经验可知(不用去别的地方找了,这个我找了之后得到的):

TemplateField tf = new TemplateField();

tf.HeaderText = obj.Name;
tf.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
tf.SortExpression = obj.RankId.ToString();
//this.gridView.Columns.Insert(i, tf);//此方法会导致PostBack数据丢失。原因我估计是只要操作了Columns里面的数组顺序就会有问题,投机取巧的方式在下面会说,也是不行的
this.gridView.Columns.Add(tf);//此方法不会

base.OnInit(e);

以上控件添加好了,绑定数据如下:

在GridView上实现事件RowDataBound,在里面进行动态的数据绑定,大概实现如下:

/*//动态列数据绑定

DataRowView rowDataSource = (DataRowView)e.Row.DataItem;
if (rowDataSource == null)
{
    return;
}
int ruleId = (int)rowDataSource["RuleId"];
int ruleMode = (int)rowDataSource["RuleMode"];
for (int i = 2; i <= _rankCount; i++)
{
  e.Row.Cells[i].Text = (int)rowDataSource["RuleId"];
}

到此,动态添加列和绑定数据基本是完成了。

二、投机取巧的实现方式,也是失败的,思路如下

1、先把GridView的所有Columns添加到一个临时数据。

2、把要添加的动态列往这里面的指定位置加。

3、然后把GridView的所有Columns清除。

4、再把临时数组里面的Columns添加回去GridView中。

以上实现也是不行的,所以不要用这种方式尝试了,问题出现在第三步,动了GridView的Columns。

三、问题的发现,基本是找了老外的网站看到的说明:

http://stackoverflow.com/questions/3919991/gridview-columns-insert-cause-my-data-to-vanish-on-postback-but-columns-add?answertab=active#tab-top

http://codeverge.com/asp.net.presentation-controls/gridview.columns.insert-problem/473635

这两篇文章里面说了,是微软的一个bug,而且是在09年就有了,也说了,人家微软也不打算修复了。

 

所以,这东西我花了两天去找方法觉得,最终是无法实现的,特此在此说明一下。如果你不在乎动态列的位置,那就直接用add添加到最后,勉强能顶住。

 

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

转载地址:http://tfhwl.baihongyu.com/

你可能感兴趣的文章
errno是否是thread safe的
查看>>
输入框正则表达式大全
查看>>
Android 三种动画详解
查看>>
函数指针和指针函数
查看>>
C#DateTime的用法
查看>>
好博客网址
查看>>
mysql表的操作
查看>>
小程序方法-小程序获取上一页的数据修改上一个页面的数据
查看>>
基于OpenGL编写一个简易的2D渲染框架-11 重构渲染器-Renderer
查看>>
eclipse 当中,小白们所不知道的 CRTL+1 快捷键
查看>>
gcc/g++ 如何支持c11/c++11标准编译
查看>>
jquery_EasyUI使用细节注意
查看>>
好的文章万里挑一
查看>>
JavaScript 继承
查看>>
ol3 Demo1 ----加载geoserver发布的地图数据
查看>>
Base64加密
查看>>
复选框、单选框 jquery判断是否选中Demo
查看>>
C# 浅拷贝与深拷贝(复制)
查看>>
Zephyr学习(一)Zephyr介绍
查看>>
springboot创建项目
查看>>