>>>为了实现批量删除选中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)
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之后,一切才恢复正常。
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(); }
晕,怎么那么难看,重新贴: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(); }
绑定过了,但是新问题又出现了,为了实现批量删除选中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;
{
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();
}
{
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();
}