在 GridView 的 Cells 中写入值时 , 要注意前后两次写入的是不是同一个控件 :
比如 , 在下面的代码中 :
第一次赋值 :
// lbl_state 为 grd_evaluation1 的 Cells 中的一个控件
foreach (GridViewRow grdRow in grd_evaluation1.Rows)
{
if (((CheckBox)(grdRow.Cells[4]).FindControl("ckb_chgState")).Checked == true)
{
((Label)grdRow.Cells[3].FindControl("lbl_state")).Text = " 一次考核结束 ";
}
else if (((CheckBox)(grdRow.Cells[4]).FindControl("ckb_chgState")).Checked == false)
{
((Label)grdRow.Cells[3].FindControl("lbl_state")).Text = "未考核 ";
}
}
又一次赋值 :
/// ckb_chgState 为 grd_evaluation1 中的一个 checkbox.
/// 此函数的功能之一是改变 checkbox 的值时 , 同时改变与之在同一行内的某一 Cells 的显示值
protected void ckb_chgState_CheckedChanged(object sender, EventArgs e)
{
// some code
((GridViewRow)((CheckBox)sender).Parent.Parent).Cells[3].Text = "一次考核结束 ";
//some code
}
通过调试时可以发现 : ((Label)grdRow.Cells[3].FindControl("lbl_state")) 的类型为 : System.Web.UI.WebControls.Label , 而 ((GridViewRow)((CheckBox)sender).Parent.Parent).Cells[3] 的类型为 : System.Web.UI.WebControls.TableCell{System.Web.UI.WebControl.DataControlFieldCell}
这是两种不同的类型 ( 不同的控件 ), 所以在系统得新启动或者整个画面刷新时 , 就不会得到我们想要的结果 ( 保存之前的修改状态 , 虽然改变保持在 DB 里 , 但是由于某些不知道的原因 , 不能及时从 DB 里取得最新的状态 )
对付这种情况 , 就是改变同一个控件的值 , 这样 , 每次刷新页面或重新启动系统时 , 就会显示最新的状态了 .
后续 : GridView 的 Cells 里 , 可以作为显示的控件可能会有很多 , 这时就需要找一个最方便我们使用的了 .
例如 , 在本例中 , 用的就是 System.Web.UI.WebControls.Label 这个控件类型 ( 即第一次赋值时的类型 , 而更改第二次赋值时的类型的语句为 :
((Label )((GridViewRow )(((CheckBox )sender).Parent.Parent)).Cells[4].FindControl("lbl_state" )).Text = "一次考核结束 ";
因为 :
((Label )((GridViewRow )(((CheckBox )sender).Parent.Parent)).Cells[4].FindControl("lbl_state" )) 这个类型正好是 System.Web.UI.WebControls.Label 类型 , 通过调试可以证明 .
------------------------------------------------------------------------------------------------------------------------------
2008年11月6日
给GridView的Cells赋值时应注意的小问题
最新推荐文章于 2024-04-15 19:47:31 发布
本文讨论了在ASP.NET GridView控件中更新单元格值时遇到的问题,特别是如何确保在页面刷新或系统重启后能正确保留状态。文章提供了具体的代码示例来说明如何避免因使用不同类型的控件而导致的状态丢失。
1106

被折叠的 条评论
为什么被折叠?



