早上看到有位同学问关于自动生成GridVie并且添加DataKeyNames属性后

回调页面时,出现错误异常.下面是我实现的方法。注意一点。就是数据绑定的时间。

要是先绑定,再添加到div1中,回调页面时,就会出错。

页面代码:

<div runat="server" id="div1" enableviewstate="false">
    </div>
    <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />

cs代码:

protected void Page_Load(object sender, EventArgs e)
    {
        bindGV();
    }
    private static DataTable NewMethod()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("name", typeof(string));
        for (int i = 0; i < 5; i++)
        {
            DataRow dr = dt.NewRow();
            dr["id"] = i;
            dr["name"] = "Name" + i;
            dt.Rows.Add(dr);
        }
        return dt;
    }
    private void bindGV()
    {
        div1.Controls.Clear();
        int t = 0;
        while (t < 3)
        {
            GridView gv = new GridView();
            gv = CreateSuperGrid();
            div1.Controls.Add(gv);
            t++;
        }
        for (int i = 0; i < div1.Controls.Count;i++ )
        {
            //我这里是先把GridView加入div1中,之后才进行数据绑定
            ((GridView)div1.Controls[i]).DataSource = NewMethod();
            ((GridView)div1.Controls[i]).DataBind();
        }

}

private GridView CreateSuperGrid()
    {
        GridView gv = new GridView();
        gv.AutoGenerateColumns = false;
        gv.EnableViewState = true;
        gv.DataKeyNames = new string[] { "id" };

BoundField bf = new BoundField();
        bf = new BoundField();
        bf.HeaderText = "序号";
        bf.DataField = "id";
        gv.Columns.Add(bf);

BoundField bf2 = new BoundField();
        bf2.HeaderText = "名称";
        bf2.DataField = "name";
        gv.Columns.Add(bf2);

CommandField cf = new CommandField();
        cf.ShowSelectButton = true;
        gv.Columns.Add(cf);

gv.SelectedIndexChanging += new GridViewSelectEventHandler(GridView1_SelectedIndexChanged);

return gv;
    }

//用做回调页面用的
    protected void Button1_Click(object sender, EventArgs e)
    {

}
    protected void GridView1_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
    {
        string value = ((System.Web.UI.WebControls.GridView)(sender)).DataKeys[e.NewSelectedIndex].Value.ToString();//这里可以看到取到的id值
    }

转载于:https://www.cnblogs.com/yijie/archive/2008/09/04/1283883.html

动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法相关推荐

  1. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

    myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...

  2. JavaScript中的回调地狱及解决方法

    JavaScript中的回调地狱及解决方法 1.回调地狱 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱 ...

  3. mysql出现error 2003_mysql启动时出现ERROR 2003 (HY000)问题的解决方法

    一.问题描述 在启动MYSQL时出现问题:"ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)& ...

  4. 回调函数与回调地狱及其解决方法 | JavaScript

    JavaScript中的回调函数与回调地狱及其解决方法 以下为整理的思维导图 图片版+文字版 文末附有参考文章链接 知识点思维导图版 一.什么是回调函数 1.MDN的定义 回调函数是作为参数传给另一个 ...

  5. FTP连接时出现“227 Entering Passive Mode” 的解决方法(附加实际案例)

    FTP连接时出现"227 Entering Passive Mode" 的解决方法 前段时间在本地的win7搭建了一个简单的FTP服务器用来测试在linux服务器上生成的批量报文, ...

  6. VM平台添加设备时提示“无效的License组件”的解决方法

    VM平台添加设备时提示"无效的License组件"的解决方法 一般在添加设备时系统提示"无效的License组件"都是由于平台缺少对应的License组件导致的 ...

  7. android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...

    android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...

  8. Windows下在Django中创建项目时ImportError: No module named django.core解决方法

    Windows下在Django中创建项目时ImportError: No module named django.core解决方法 今天在对照<Python编程:从入门到实践>学## 标题 ...

  9. ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法

    ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法 参考文章: (1)ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法 (2)ht ...

最新文章

  1. 2个422 并联一个总线_株洲新添2个全国“一村一品”示范村,一个在炎陵
  2. mysql2005备份_创建完整数据库备份 - SQL Server | Microsoft Docs
  3. NeurIPS 2019公布获奖论文!新增杰出新方向奖项,微软华裔研究员斩获经典论文...
  4. 系统集成项目管理工程师软考辅导——3年真题透解与全真模拟
  5. XML-RPC远程方法调用
  6. 关于bin和obj文件夹。debug 和release的区别(转)
  7. No space left on device 解决 Cydia 安装应用错误
  8. (码友推荐)2018-07-12 .NET及相关开发资讯速递
  9. 依赖管理和Maven
  10. Js实现异步刷新(原创)
  11. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  12. 如何删除在Github中创建的项目
  13. busybox源码剖析(1)---whoami.c
  14. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
  15. css将空的div撑开,如何使用css将空的浮动div伸展到可用的全高度?
  16. java简单烟花代码_JavaScript实现的简单烟花特效代码
  17. 借助百度识图爬取数据集
  18. laravel 语言包
  19. rmmod命令卸载驱动过程详解
  20. Magento二次开发哪家好呢?

热门文章

  1. rpm方式安装mysql5.7.24_linux centOS 7安装mysql 5.7.24
  2. rpm怎样在win安装mysql_centos7.6安装mysql的正确步骤
  3. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...
  4. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
  5. html5 data url,HTML5 / Javascript – DataURL到Blob和Blob到DataURL
  6. HDOJ-2062 :Subset sequence(DP)
  7. OpenCV中的霍夫线变换、概率霍夫线变换
  8. python基础---元组、字典、函数、文件、异常
  9. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(1):Stream PCD流式载入激光点云数据
  10. 基于深度学习的目标检测综述