日期:2014-05-18  浏览次数:20704 次

关于个gridview里ButtonField的一点疑问
以前操作数据库直接用gridview里的命令,这次因为读的是查询再用Button写回去,用了Buttonfield,突然发现如果在gridview里隐藏了数据库的索引列,那以下命令取索引列时:
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow selectedRow = userlist.Rows[index];
TableCell contactCell = selectedRow.Cells[0];
什么也取不出来,selectedRow.Cells[1]读出的列是gridview可以看到的第一列,也就是说隐藏的索引列竟然不能用了,将索引列visible设为true后selectedRow.Cells[0]方能正常读取,以前用gridview没发现有这种问题,即使是隐藏列也是可以调用的,不知是小弟太菜,还是微软设定了某种工作机制,请高人指教~~~

------解决方案--------------------
隐藏列是可以读出来的,前提是将该列设置为模板列!
读是用FindControl("控件名")来读!!
------解决方案--------------------
<asp:TemplateField>
<ItemTemplate>
 <asp:HiddenField ID="CardParId" Value='<%# Eval("CardParId") %>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TypeName" HeaderText="卡片名称" />


HiddenField hi = (HiddenField)this.gvCardInfo.Rows[e.NewSelectedIndex].Cells[0].FindControl("CardParId");


------解决方案--------------------
用模板列 然后Lable l= gv.Cells[0].Controls[1] as Lable
或者FindControls("控件id")也可以