注册 登录
编程论坛 ASP.NET技术论坛

[求助]GridView逐项添加的问题

ice_beiyu 发布于 2007-07-19 17:43, 1285 次点击

总是提示:索引超出范围。必须为非负值并小于集合大小。
参数名: index
下面是部分代码:
for (i = 0; i <=dv.Tables[0].Rows.Count-1; i++)
{

GridView1.Rows[i].Cells[1].Text = dv.Tables[0].Rows[i]["D13"].ToString();
//GridView1.Rows[i].Cells[1].Text = dv.Tables[0].Rows[i]["Tcbh"].ToString();
GridView1.Rows[i].Cells[2].Text = dv.Tables[0].Rows[i]["d16"].ToString();
GridView1.Rows[i].Cells[3].Text = dv.Tables[0].Rows[i]["D14a"].ToString();
GridView1.Rows[i].Cells[4].Text = dv.Tables[0].Rows[i]["sszy"].ToString();
GridView1.Rows[i].Cells[5].Text = dv.Tables[0].Rows[i]["Gd1"].ToString();
GridView1.Rows[i].Cells[6].Text = dv.Tables[0].Rows[i]["D20"].ToString();

设计代码:
asp:GridView ID="GridView1" runat="server" Width="635px" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
<Columns>

<asp:ButtonField Text="详细查询" HeaderText="详细查询" />
<asp:BoundField HeaderText="姓名" ReadOnly="True" DataField="D13" />
<asp:BoundField HeaderText="性别" DataField="D16" />
<asp:BoundField HeaderText="部门" DataField="D14a" />
<asp:BoundField HeaderText="专业" DataField="sszy" />
<asp:BoundField HeaderText="学历" DataField="D30" />
<asp:BoundField HeaderText="工作时间" DataField="D20" />
<asp:BoundField HeaderText="培养主责人" DataField="pyzzr" />
<asp:BoundField HeaderText="培养直接责任人" DataField="pyds" />
<asp:BoundField HeaderText="总体培养目标" DataField="zongtimb" />
<asp:BoundField HeaderText="年度" DataField="pynd" />
<asp:BoundField HeaderText="年度培养目标" DataField="ndmb" />
<asp:BoundField HeaderText="年度考核" DataField="ndjg" />
<asp:BoundField HeaderText="月度" DataField="pyyd" />
<asp:BoundField HeaderText="月度考核" DataField="ydjg" />
<asp:BoundField HeaderText="学习纪录" DataField="ydxuexijl" />
<asp:BoundField HeaderText="月度学习报告" DataField="grxxbg" />
</Columns>

小弟实在想不出来怎么办了,求各位帮帮忙!急!!!急!!!急!!!谢谢了!

11 回复
#2
管家2007-07-19 23:34
GridView1.Rows[i].Cells[1].Text = dv.Tables[0].Rows[i]["D13"].ToString();
//GridView1.Rows[i].Cells[1].Text = dv.Tables[0].Rows[i]["Tcbh"].ToString();
GridView1.Rows[i].Cells[2].Text = dv.Tables[0].Rows[i]["d16"].ToString();
GridView1.Rows[i].Cells[3].Text = dv.Tables[0].Rows[i]["D14a"].ToString();
GridView1.Rows[i].Cells[4].Text = dv.Tables[0].Rows[i]["sszy"].ToString();
GridView1.Rows[i].Cells[5].Text = dv.Tables[0].Rows[i]["Gd1"].ToString();
GridView1.Rows[i].Cells[6].Text = dv.Tables[0].Rows[i]["D20"].ToString();

我觉得你可以这么试一下,这里好象不应该是 GridView1.Rows[i].Cells[1].Text 而是 GridView1.Rows[0].Cells[1].Text
#3
管家2007-07-19 23:35
嘿嘿 不知道对不对    只是建议哈   
#4
jyoseyi2007-07-20 09:31
不知道你的这段代码循环有什么意义.,就竟是要做什么用,你就直接把DataSet绑定到GridView1不就行了吗
#5
ice_beiyu2007-07-20 09:44

循环是因为查询出来的不是一条记录,直接绑定也不行,因为有些项不是要显示从数据库查出来的东西。比如说某个位置对应的数据库里的内容如果为空就显示:未制订,但是如果不为空也不是现实数据库里的内容,而是显示:已制订。


我试了,二楼的说的办法也不对!

#6
jyoseyi2007-07-20 10:02

你把SQL语句写好就可以了啊,如果为空你就显示"未制订",不为空"已制订"
比如 select Name,(case a.State when 0 then '启用' when 1 then 启用' end) as State FROM [User]
数据库里State 列的的内容是 0 或者1 ,而显示出的是 启用 或者 启用

#7
jyoseyi2007-07-20 10:05
select Name,(case State when 0 then '启用' when 1 then 启用' end) as State FROM [User]
#8
川流不息2007-07-20 10:47
是的,直接用SQL語句拼湊起來就行。如果實在不行,你就把值寫到DataTable裡,然後再將寫好的DataTable綁定到GridView中,這樣更方便一些吧。
#9
ice_beiyu2007-07-20 14:00
小弟刚刚用这个,还希望多给点提示。比如页面设置代码,还有数据绑定,希望详细点。书上写得很多都不实用。谢谢了
#10
ice_beiyu2007-07-20 14:04
还有就是,我所要显示的数据是从三个表中取得的,每一行数据都是
#11
jyoseyi2007-07-20 14:58

先把这3个表的数据用SQL语句查到1张表就可以了嘛

#12
Kendy1234562007-07-20 17:51
还是直接绑定的好。 至于楼主说的 某些cell需要变更显示内容 用TemplateColumn代替BoundColumn 然后在Itemdatabound事件里面更新显示即可
1