• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

求教,无法改变DataGrid中控件的状态

NEODIO 2003-12-10 04:01:17
碰到一个很奇怪的问题,DataGrid无法获得更新后的值,我在写UpdataCommand

事件的时候,进入Edit模板使用TextBox试图改变cell中的值,点击“更新”后Grid

中的值并没有改变,trace之后发现(TextBox)e.Item.Cells[4].Controls[0]获得的

值并不是我改变后的值,而是原来与DataGrid绑定过后的值,也就是说在用未编辑之

前的值更新数据库……

同样的问题也发生在同一个Grid的另一个CheckBox模板列中,代码如下:

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 + ",";

}
}

无论选中多少个CheckBox

((CheckBox)dataGridItem.Cells[6].FindControl("chkDelete")).Checked的值都为

false,也就是说CheckBox也还是保持它的原始状态(未选中),请各位不吝赐教,小

弟在此谢过了。
...全文
15 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
NEODIO 2003-12-12
晕,怎么那么难看,重新贴:

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();
}
回复
NEODIO 2003-12-12
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();
}
回复
NEODIO 2003-12-12
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之后,一切才恢复正常。
回复
saucer 2003-12-11
>>>为了实现批量删除选中CheckBox数据功能,我用了一个

don't set CheckBox的AutoPostBack属性 or set CheckBox的AutoPostBack属性=false

>>>DataGrid翻页显示Numeric还是NextPrev

the code inside

if(!Page.IsPostBack)

is called only when you first access the page (a GET method or POST without ViewState/__EVENTTARGET)
回复
NEODIO 2003-12-11

绑定过了,但是新问题又出现了,为了实现批量删除选中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;
回复
KimSoon98 2003-12-11
你的问题我也碰到过,我想是因为在编辑cell的时候,不会更新绑定该cell的数据源,只有编辑完cell,焦点转移到另外的cell中是,才会试图更新绑定该cell的数据源
回复
NEODIO 2003-12-11
無奈,自己顶一下
回复
saucer 2003-12-11
did you forget to bind your datagrid inside

if (!IsPostBack)
{
//bind your datagrid here
}

???
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-12-10 04:01
社区公告

让您成为最强悍的C#开发者