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

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

在页面重写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添加到最后,勉强能顶住。

GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决的更多相关文章

  1. asp.net gridview动态添加列,并获取其数据;

    1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...

  2. gridview动态添加列的问题

    相信大家也和我一样遇到过这种问题,gridview在生成列的时候当列不确定怎么办?下面分享一下自己的解决方法. 举个列子说明一下. 普通列的添加比较简单. BoundField bf = new Bo ...

  3. GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容

    此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...

  4. [转]RDLC报表——动态添加列

    本文转自:http://www.cnblogs.com/pszw/archive/2012/07/19/2599937.html 前言 最近接到一个需求:在给定的数据源中,某(些)列,可能需要单独统计 ...

  5. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  6. GridView 动态添加绑定列和模板列

    动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...

  7. DataGridview动态添加列

    1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...

  8. WPF GridView动态添加项并读取数据

    假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...

  9. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

随机推荐

  1. xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题

    xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题一直提示密码错误, 什么原因? ------解决方案--------------------改了密码之后,phpmyadmin ...

  2. sqlzoo.net刷题3

    Find the continents where all countries have a population <= 25000000. Then find the names of the ...

  3. http协议详解<一>

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://7826443.blog.51cto.com/7816443/1729227 写在 ...

  4. JS判断数据是否是JSON类型

    var isJson = function(obj){     var isjson = typeof(obj) == "object" && Object.pro ...

  5. 课题:如何培养自己的SEO资源

    课题:如何培养自己的SEO资源 问:做SEO最重要的是什么?[针对性的流量]答:看获取一样东西的门槛.稀缺性,人人可得价值不大外链 内容 流量[正确]针对性的自然流量是用户自愿带来的,价值高,能形成购 ...

  6. html的解析

    Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都 ...

  7. js实现网页防止被iframe框架嵌套及几种location.href的区别

    首先我们了解一下几种location.href的区别简单的说:几种location.href的区别js实现网页被iframe框架功能,感兴趣的朋友可以了解下 首先我们了解一下:window.locat ...

  8. ListView中多个EditText设置焦点 多次点击异常报错

    08-17 18:23:09.825: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main 08-17 18:23:09.825: ERROR/Andr ...

  9. 20135231 —— Linux 基础入门学习

    20135231 何佳 学习计时:共12小时 读书:5 代码:2 作业:2 博客:3 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Li ...

  10. sqlite3的使用(iOS嵌入式关系数据库)

    1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...