利用DataView的RowFilter筛选数据怎么会漏掉第一行呢?

时间:2022-11-21 20:04:59
我现在设计一个批量选择货品的窗口(WinForm),我将DataGridView绑定一个表,DataGridView的第一列为CheckBox控件,DataGridView外面有个全选的CheckBox,我想实现点击这个全选框时,DataGridView的行就全部选中,再点一次,DataGridView的行就取消全部选中。
foreach (DataGridViewRow row in dtGv.Rows)
{
  row.Cells["Choose"].Value = cbxAlldtGv.Checked;
}

以上过程已经处理完,现在出现的问题是我想将DataGridView的第一列值为true的筛选出来,代码如下:
DataView tempView = new DataView(tempdt);
tempView.RowFilter = "Choose = 1";
DataTable retemp = tempView.ToTable();

得到的表retemp总是少了第一行的数据,如果我手工将每一行选中,retemp又是能够全部筛选出来。

不知是不是DataView的RowFilter的问题还是全选这个CheckBox有问题,请各位不吝赐教!

10 个解决方案

#1


这是个焦点的问题,
楼主可以加上dtGv.Rows[0].Cells[0].Selected = true;
试一试

#2


楼主在执行完 全选操作后,
加上
dtGv.CurrentCell = dgConfig[0, 0];
应该就解决问题了

#3


试过dtGv.Rows[0].Cells[0].Selected = true;还是一样,
dgConfig怎么定义呢?谢谢!

#4


用DataGridView中的CurrentCellDirtyStateChanged事件
private void grdSplit_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (grdSplit.IsCurrentCellDirty)
grdSplit.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

#5


引用 4 楼 yutian_31 的回复:
用DataGridView中的CurrentCellDirtyStateChanged事件
private void grdSplit_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (grdSplit.IsCurrentCellDirty)
grdSplit.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

试过还是不行,我执行全选再查询都没有触发这个事件.

#6


那就换个方法
DataTable dt;
foreach (DataRow dr in Tables.Select("Selected = 1"))
{
  dt.Add(dr);
}

#7


Tables.Select("Selected = 1") 括号里面如果是bool 可以直接 Selected = true 如果是字符串需要调整下 你试下了  

#8


foreach (DataGridViewRow row in dtGv.Rows) 

  row.Cells[0].Value = cbxAlldtGv.Checked; 


看看

#9


DataView的RowFilter跟Tables.Select都不能解决问题,都会漏掉一行,改变datagridview的焦点可以筛选出全选的数据,但是点击取消全选时又会漏一行没有取消,还是没解决,最后我用Linq来筛选才解决了.

#10


如何全部取消datagridview的选中行啊,第一次显示的时候,我写了
dataGridViewProject.Rows[0].Selected = false;
但每一次第一行还是被选中了,求高手指导

#1


这是个焦点的问题,
楼主可以加上dtGv.Rows[0].Cells[0].Selected = true;
试一试

#2


楼主在执行完 全选操作后,
加上
dtGv.CurrentCell = dgConfig[0, 0];
应该就解决问题了

#3


试过dtGv.Rows[0].Cells[0].Selected = true;还是一样,
dgConfig怎么定义呢?谢谢!

#4


用DataGridView中的CurrentCellDirtyStateChanged事件
private void grdSplit_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (grdSplit.IsCurrentCellDirty)
grdSplit.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

#5


引用 4 楼 yutian_31 的回复:
用DataGridView中的CurrentCellDirtyStateChanged事件
private void grdSplit_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (grdSplit.IsCurrentCellDirty)
grdSplit.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

试过还是不行,我执行全选再查询都没有触发这个事件.

#6


那就换个方法
DataTable dt;
foreach (DataRow dr in Tables.Select("Selected = 1"))
{
  dt.Add(dr);
}

#7


Tables.Select("Selected = 1") 括号里面如果是bool 可以直接 Selected = true 如果是字符串需要调整下 你试下了  

#8


foreach (DataGridViewRow row in dtGv.Rows) 

  row.Cells[0].Value = cbxAlldtGv.Checked; 


看看

#9


DataView的RowFilter跟Tables.Select都不能解决问题,都会漏掉一行,改变datagridview的焦点可以筛选出全选的数据,但是点击取消全选时又会漏一行没有取消,还是没解决,最后我用Linq来筛选才解决了.

#10


如何全部取消datagridview的选中行啊,第一次显示的时候,我写了
dataGridViewProject.Rows[0].Selected = false;
但每一次第一行还是被选中了,求高手指导