各位高人,小的我在这里又要麻烦大家了。
    我在datagrid中加了个模板列,加入了checkbox,用于管理员来设置浏览者可以看到哪些内容。数据库中和checkbox相对应的字段是allow_display,为布尔型。我现在想在改变checkbox的checked值的同时修改数据库中相应记录的allow_display值。为了简化问题,我在datagrid外面加了个label,用于获取改变后的checkbox的checked值。为此我写了如下代码。但这段代码只有第一条记录可以正常取值。其它的记录的checkbox值改变时只能取第一条的checked值。请高手帮忙修正!==============================================================
private void dtgArchive_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item)
{
CheckBox chk=(CheckBox)e.Item.FindControl("ckbDisplay");
chk.CheckedChanged+=new EventHandler(chk_CheckedChanged);
}
} // 得到指定DataGrid的Items中的的CheckBox对象
private CheckBox GetItemCheckBox(DataGrid grd)
{ CheckBox chk = null;
                    
foreach (DataGridItem i in grd.Controls[0].Controls)
{
if(i.ItemType == ListItemType.Item)
{
chk = (CheckBox)i.FindControl("ckbDisplay");
break;
}
} return chk; } private void chk_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = this.GetItemCheckBox(this.dtgArchive);
this.lblTest.Text=chk.Checked.ToString();
}

解决方案 »

  1.   

    http://www.cnblogs.com/smilnet/archive/2004/07/17/25150.aspx
    http://www.ccw.com.cn/htm/center/prog/02_2_26_4.asp
    http://www.microsoft.com/china/community/Column/23.mspx
      

  2.   

    楼主要点击checkbox马上更新么?还是最后还要点按钮更新,如果是按钮就按下面就可以了
    foreach (DataGridItem i in grd.Controls[0].Controls)
    {
       chk = (CheckBox)i.FindControl("ckbDisplay");
       if(chk.Checked==true)
          {
            更新操作
           }
    }
      

  3.   

    1、在DataGrid的ItemCreated事件里为模板列中的CheckBox cb添加CheckedChanged事件:
    private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){
    if( e.Item.ItemType == ListItemType.Item || 
    e.Item.ItemType==ListItemType.SelectedItem || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    CheckBox chk=(CheckBox)e.Item.FindControl("cb"); chk.CheckedChanged += new EventHandler(chk_CheckedChanged); }
    }2、
    private void chk_CheckedChanged(object sender, EventArgs e){
    CheckBox chk = (CheckBox)sender;
    DataGridItem item = (DataGridItem)chk.NamingContainer;//使用该引用来获取cb的命名容器
    string id = item.Cells[0].Text;//比如取出DataGrid的第一列id值
    //.....如更新数据库等
    }
      

  4.   

    二楼GDNPC的方法可行,checkbox的AutoPostBack值设为false,用一个按钮统一更新
      

  5.   

    http://sz.luohuedu.net/xml/Content.asp
      

  6.   

    if(e.Item.ItemType==ListItemType.Item)
    改为:
    if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlertItem)