首页 > 动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法

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

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

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

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

页面代码:

   



   


   

 

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

更多相关:

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...

  • GridView的编辑,更新,取消,删除等功能演示 这是一个GridView应用的视频,内容很透彻的讲解了GridView的很多实用的技巧。 下载地址:http://download.cnblogs.com/insus/ASPDOTNET/GridViewEditUpdateCancelDelete.rar...

  •     先吐为敬!   最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆“代码拷贝党”、“留一手”、“缺斤少两”、“不说人话”、“自己都没跑通还出来发blog”、“各种缺少依赖包”、“各种注释都没有”、“自己都不知道在写什么”的程序大神纷纷为了增加自己博客一个帖子的名额而发布了各种千奇百�...

  • 阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件: 函数名称:syscall(SYS_gettid) 该函数直接返回了一个pid_t int类型的数字,即为当前线程id 此外函数pthread_s...

  • 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数据库自增 id 这个就是说你的...

  • ORM操作    单表、一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models.CharField(max_length=32) 6 7 8 class UserInfo(m...

  • 建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engine=innodb default charset=utf8;student表创建语句 c...