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

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

在页面重写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. 前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例

    这章的目的是为了把前面所学习的内容整合一下,这个示例完成一个简单图书管理模块,因为中间需要使用到Bootstrap这里先介绍Bootstrap. 示例名称:天狗书店 功能:完成前后端分离的图书管理功能 ...

  2. You are note Hk

    直接打开是forbidden  最后一句话提示 于是改包 第二次还是修改包 Mozilla/5.0 (MSIE 7.0; Windows NT 6.0;.NET CLR 9.9)

  3. Spring 集成 RMI

    Maven <dependency> <groupId>org.springframework</groupId> <artifactId>spring ...

  4. poj2407

    欧拉函数裸题. 欧拉函数:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 欧拉函数的定义: E(N)= (  区间[1,N-1] 中与 N 互质的整数个数). 对于 积性函数 F ...

  5. 10Spring_AOP编程(传统编程)

    注意我写这篇文章的思路,要想做切面编程,包含两个部分,通知和切点,通知是你要做哪些增强,切点是指你要拦截哪些方法.先介绍通知的定义再去介绍切点的定义.这篇文章我取名叫做Spring_AOP编程(传统编 ...

  6. RelayCommand命令

    原文:http://www.cnblogs.com/xiepeixing/archive/2013/08/13/3255152.html 常用Wpf开发中我们在ViewModel中实现INotifyP ...

  7. 加密算法使用(三):用用BASE64

    采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到 package testEncrypt; import java.security.Key; import java.secu ...

  8. OSGEARTH三维地形开源项目

    第一章   OSGEarth介绍 第二章   OSGEarth编译环境配置 OSGEarth的编译环境配置随着版本的不同.运行平台的不同,也有很大的差异.本章主要以Windows XP SP3(x86 ...

  9. JS 之性能优化(2)

    继续上一篇的JS性能优化之后,下面接着讲关于前端性能优化的内容.如果有不对的地方欢迎纠正. 1.避免过多的重排与重绘操作. 尽量将DOM中的多个读操作放一起,中间不要插入写的操作,因为写操作会导致浏览 ...

  10. linux内核分析 第4章读书笔记

    第四章 进程调度 一.抢占与非抢占 1.非抢占式进程调度 进程会一直执行直到自己主动停止运行 2.抢占式进程调度 Linux/Unix使用的是抢占式的方式,强制的挂起进程的动作就叫做抢占. 二.进程优 ...