首页 新闻 会员 周边 捐助

动态创建gridview给datakey赋值报错

0
悬赏园豆:10 [已解决问题] 解决于 2008-09-04 19:22

gridview的个数是动态生成的,也是动态绑定数据;每个gridview的列都是一样,现在需要通过DataKey获取每行ID,给DataKeyNames赋值的时候报错,说已经个叫“ID”的DataKey了,下面是绑定gridview的方法

 

Code
private void BindSuperGrid(GridView gv)
{
gv.RowDataBound
+= new GridViewRowEventHandler(gv_RowDataBound);
DataTable dt
= new DataTable();
gv.AutoGenerateColumns
= false;
gv.DataKeyNames
= new string[] { "id"}; //这个地方报错

gv.DataSource
= dt;
gv.DataBind();


}

错误信息:已添加项。字典中的关键字:“id”所添加的关键字:“id”

 

请问怎么解决

 

问题补充: 我帖一下完整代码 cs代码如下: private void BindSuperGrid(GridView gv) { 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); } gv.AutoGenerateColumns = false; gv.DataKeyNames = new string[] { "id" }; gv.DataSource = dt; gv.DataBind(); } private void bindGV() { div1.Controls.Clear(); for (int i = 0; i < 3; i++) { GridView gv = new GridView(); gv = CreateSuperGrid(); BindSuperGrid(gv); div1.Controls.Add(gv); } } private GridView CreateSuperGrid() { GridView gv = new GridView(); BoundField bf = new BoundField(); bf = new BoundField(); bf.HeaderText = "序号"; bf.DataField = "id"; gv.Columns.Add(bf); bf = new BoundField(); bf.HeaderText = "名称"; bf.DataField = "name"; gv.Columns.Add(bf); return gv; } 页面代码: <div id="div1" runat="server"></div> 第一次加载页面不报错,当页面回发的时候就出现错误 Thanks
卒子的主页 卒子 | 小虾三级 | 园豆:588
提问于:2008-09-03 16:36
< >
分享
最佳答案
0

希望这个可以给您提供帮助

主要的改动是DataTable的绑定时间。

vs2008调试通过。

页面代码:

    <div runat="server" id="div1" enableviewstate="false">
    </div>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
cs代码:

 

Code
程序员老李 | 小虾三级 |园豆:790 | 2008-09-04 12:30
其他回答(4)
0
我测试了一下,可惜的是,我这边未报错。最好楼主把相应 gridview 的页面部分代码粘贴过来。不过光读你的报错信息,感觉是key重复定义了。是不是你在gridview的页面上也指定了"id"?
陛下 | 园豆:3938 (老鸟四级) | 2008-09-03 16:51
0
应该是你页面中已经指定了DataKeyNames的值了吧。
stewen | 园豆:14 (初学一级) | 2008-09-03 17:09
0
你的ID是唯一值吗?或者事先你已经给datakeynames添加了id了,你可以将 gv.DataKeyNames = new string[] { "id"}; 去掉看看,
zjy | 园豆:3194 (老鸟四级) | 2008-09-03 17:41
0

应该是ID有重复的吧

绝版色狼 | 园豆:318 (菜鸟二级) | 2008-09-04 10:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册