did you forget to bind your datagrid insideif (!IsPostBack)
{
//bind your datagrid here
}???

解决方案 »

  1.   

    你的问题我也碰到过,我想是因为在编辑cell的时候,不会更新绑定该cell的数据源,只有编辑完cell,焦点转移到另外的cell中是,才会试图更新绑定该cell的数据源
      

  2.   


        绑定过了,但是新问题又出现了,为了实现批量删除选中CheckBox数据功能,我用了一个很笨的办法,我将CheckBox的AutoPostBack属性设置为True之后,CheckBox模板列的状态可以改变了,但是每次都要PostBack -_-!!! ,TextBox还是老样子(我原来用的是BoundColumns,现在转换成模板列了,但是还是老样子)……    另外又出现了一个新问题:    绑定DataGrid方法如下:    void BindGrid(){
    DataGrid.DataSource = CreateDataSource();
    DataGrid.DataBind();
    }    我在Page_Load中添加了一段代码,用于判断某个CheckBox是否被选中,从而改变DataGrid翻页显示Numeric还是NextPrev,当BindGrid()方法不包含在if(!IsPostBack)块中时一切正常,但当我把BindGrid()移到if(!IsPostBack)中后,出现错误:既本来应该显示为Numeric却显示NextPrev,代码如下: if(!Page.IsPostBack)
    {
                       //do sth else here
    BindGrid();
    }
    if (CheckBox1.Checked) 
    DataGrid.PagerStyle.Mode=PagerMode.NumericPages;
    else 
    DataGrid.PagerStyle.Mode=PagerMode.NextPrev;
      

  3.   

    >>>为了实现批量删除选中CheckBox数据功能,我用了一个don't set CheckBox的AutoPostBack属性 or set CheckBox的AutoPostBack属性=false>>>DataGrid翻页显示Numeric还是NextPrevthe code insideif(!Page.IsPostBack)is called only when you first access the page (a GET method or POST without ViewState/__EVENTTARGET)
      

  4.   

    To saucer GG:    那么批量删除的正确做法是?用hidden类型<Input>控件 + JavaScript实现么?我猜想这一切问题的根源都来自一处,我的DataGrid是放在Panel中的,Panel的Visible属性设置为false,所以DataGrid的Visible属性也被强制设置为false(我只设置了Panel),只有当Panel.Visible = true时DataGrid才被显示出来,可是当我对DataGrid进行一定的操作(例如添加/删除列)后,DataGrid就不会显示了,只有我将DataGrid拖曳出Panel,然后将Visible属性由false更改为true再将其放回Panel之后,一切才恢复正常。
      

  5.   

    DataGrid的UpdateCommand事件已经正常,求教DataGrid中批量删除的正确做法,我的做法是: private void btnDelete_Click(object sender, System.EventArgs e)
    {
    string id = "";
    foreach(DataGridItem dataGridItem in DataGrid.Items)
    { if (dataGridItem.ItemType == ListItemType.Item || dataGridItem.ItemType == ListItemType.AlternatingItem)
    if (((CheckBox)dataGridItem.Cells[6].FindControl("chkDelete")).Checked)
    id += dataGridItem.Cells[3].Text + ",";
    } SqlConnection sqlConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]); sqlConnection.Open(); SqlCommand myCommand = new SqlCommand("DELETE news WHERE id IN (" + id.Substring(0,id.Length - 1) + ")",sqlConnection); myCommand.ExecuteNonQuery(); BindGrid();
    }
      

  6.   

    晕,怎么那么难看,重新贴:DataGrid的UpdateCommand事件已经正常,求教DataGrid中批量删除的正确做法,我的做法是:private void btnDelete_Click(object sender, System.EventArgs e)
    {
    string id = "";
    foreach(DataGridItem dataGridItem in DataGrid.Items)
    { if (dataGridItem.ItemType == ListItemType.Item || dataGridItem.ItemType == ListItemType.AlternatingItem) if (((CheckBox)dataGridItem.Cells[6].FindControl("chkDelete")).Checked) id += dataGridItem.Cells[3].Text + ",";
    } SqlConnection sqlConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]); sqlConnection.Open(); SqlCommand myCommand = new SqlCommand("DELETE news WHERE id IN (" + id.Substring(0,id.Length - 1) + ")",sqlConnection); myCommand.ExecuteNonQuery();
    BindGrid();
    }