问题:全选后删除没有问题,DataGridViewCheckBoxColumn
来源:互联网 发布:centos 源码安装lnmp 编辑:程序博客网 时间:2024/04/29 01:23
问题:全选后删除没有问题,但是选择了其中几条后,不能将选中的这些记录都删除掉,总是有那么几条删不掉?
请大家帮忙看看我的代码,帮忙纠正,有更好的方法请给出关键代码,谢谢!
datagridview设计如下:第1列是DataGridViewCheckBoxColumn列,其他列是DataGridViewTextBoxColumn列
//代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
LinkDB linkdb = new LinkDB();
string strSelectAll = "select * from tb1 ";
string strTable = "tb1 ";
DataSet ds = new DataSet();
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Azure;
ds = linkdb.QueryDB(strSelectAll, strTable);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = strTable;
}
bool blIsSelectAll = false;
//全选
private void btnSelectAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
((DataGridViewCheckBoxCell)dr.Cells[0]).Value = true;
}
blIsSelectAll = true;
return;
}
//取消全选
private void btnCancelAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
((DataGridViewCheckBoxCell)dr.Cells[0]).Value = false;
}
blIsSelectAll = false;
return;
}
//删除
private void btnDelete_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.Rows.Count > 0)
{
if (blIsSelectAll) //全选:进行批量删除
{
for (int rowIndex = 0; rowIndex < ds.Tables[strTable].Rows.Count; rowIndex++)
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
}
else //删除选中了记录
{
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
ds.Tables[strTable].Rows[j].Delete();//逻辑性删除
//物理性删除
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
blIsSelectAll = false;
}
}
} 50 修改 删除 举报 引用 回复
解决方法
首先缓存你所选择的行,比如把选择的行存在List <DataGridViewRow> 中,然后循环List进行删除。不要循环DataGridView.Rows.Count进行删除
修改 删除 举报 引用 回复
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
ds.Tables[strTable].Rows[j].Delete();//逻辑性删除
//物理性删除
}
}
改成:
List <DataGridViewRow> tmpList = new List <DataGridViewRow> ();
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
tmpList.Add(ds.Tables[strTable].Rows[j]);
}
}
for (int i = 0; i < tmpList.Count; i++)
{
dataGridView1.Rows.Remove(tmpList[i]);
}
tmpList == null; 修改 删除 举报 引用 回复
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
to:
for (int rowIndex = ds.Tables[strTable].Rows.Count; rowIndex > = 0; rowIndex--)
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
修改 删除 举报 引用 回复
所以应该从选择记录的最後一条开始删除 修改 删除 举报 引用 回复
后面的index都不对了,所以应该从选择记录的最后一条开始删除
修改 删除 举报 引用 回复
tmpList=null 修改 删除 举报 引用 回复
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
tmpList.Add(dataGridView1.Rows[j]);
}
}
for (int i = 0; i < tmpList.Count; i++)
{
dataGridView1.Rows.Remove(tmpList[i]);
}
tmpList = null;
请大家帮忙看看我的代码,帮忙纠正,有更好的方法请给出关键代码,谢谢!
datagridview设计如下:第1列是DataGridViewCheckBoxColumn列,其他列是DataGridViewTextBoxColumn列
//代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
LinkDB linkdb = new LinkDB();
string strSelectAll = "select * from tb1 ";
string strTable = "tb1 ";
DataSet ds = new DataSet();
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Azure;
ds = linkdb.QueryDB(strSelectAll, strTable);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = strTable;
}
bool blIsSelectAll = false;
//全选
private void btnSelectAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
((DataGridViewCheckBoxCell)dr.Cells[0]).Value = true;
}
blIsSelectAll = true;
return;
}
//取消全选
private void btnCancelAll_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
((DataGridViewCheckBoxCell)dr.Cells[0]).Value = false;
}
blIsSelectAll = false;
return;
}
//删除
private void btnDelete_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.Rows.Count > 0)
{
if (blIsSelectAll) //全选:进行批量删除
{
for (int rowIndex = 0; rowIndex < ds.Tables[strTable].Rows.Count; rowIndex++)
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
}
else //删除选中了记录
{
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
ds.Tables[strTable].Rows[j].Delete();//逻辑性删除
//物理性删除
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
blIsSelectAll = false;
}
}
} 50 修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- noky
- 等级:
解决方法
首先缓存你所选择的行,比如把选择的行存在List <DataGridViewRow> 中,然后循环List进行删除。不要循环DataGridView.Rows.Count进行删除
修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- noky
- 等级:
- 加为好友
- 发送私信
- 在线聊天
- zhengye6910
- 等级:
- 加为好友
- 发送私信
- 在线聊天
- noky
- 等级:
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
ds.Tables[strTable].Rows[j].Delete();//逻辑性删除
//物理性删除
}
}
改成:
List <DataGridViewRow> tmpList = new List <DataGridViewRow> ();
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
tmpList.Add(ds.Tables[strTable].Rows[j]);
}
}
for (int i = 0; i < tmpList.Count; i++)
{
dataGridView1.Rows.Remove(tmpList[i]);
}
tmpList == null; 修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- sbqcel
- 等级:
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
to:
for (int rowIndex = ds.Tables[strTable].Rows.Count; rowIndex > = 0; rowIndex--)
{
ds.Tables[strTable].Rows[rowIndex].Delete();//逻辑性删除(从数据集ds中删除)
//物理性删除(从DB中删除)
}
修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- zhangci226
- 等级:
所以应该从选择记录的最後一条开始删除 修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- LoveCleverDog
- 等级:
- 加为好友
- 发送私信
- 在线聊天
- liujiwe79
- 等级:
后面的index都不对了,所以应该从选择记录的最后一条开始删除
修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- zhengye6910
- 等级:
- 加为好友
- 发送私信
- 在线聊天
- zhengye6910
- 等级:
tmpList=null 修改 删除 举报 引用 回复
- 加为好友
- 发送私信
- 在线聊天
- zhengye6910
- 等级:
for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
if (Convert.ToBoolean(dataGridView1[0, j].EditedFormattedValue.ToString()))
{
tmpList.Add(dataGridView1.Rows[j]);
}
}
for (int i = 0; i < tmpList.Count; i++)
{
dataGridView1.Rows.Remove(tmpList[i]);
}
tmpList = null;
- 问题:全选后删除没有问题,DataGridViewCheckBoxColumn
- DataGridView中的DataGridViewCheckBoxColumn的值,在选择后,再次点击无法取消的问题
- linux删除文件后没有释放内存的问题
- 解决linux删除文件后空间没有释放问题
- 解决linux删除文件后空间没有释放问题
- centos6.5 删除文件后没有释放空间的问题
- 全选DataGridView中的DataGridViewCheckBoxColumn选项
- mount后没有权限问题
- DataGridViewCheckBoxColumn值绑定问题 -个人感觉不怎么完美
- C# 对 DataGridViewCheckBoxColumn 操作时选中行状态更新问题
- GridView全选并删除所有列的问题
- 两个select multiple 多选 全选 取值 增加 删除 问题
- 两个select multiple 多选 全选 取值 增加 删除 问题
- 两个select multiple 多选 全选 取值 增加 删除 问题
- 两个select multiple 多选 全选 取值 增加 删除 问题
- jquery全选和反全选在第三次点击后无效的问题
- hadoop起动后没有datanode的问题
- CentOS7安装导致开机没有win10启动项以及win10删除CentOS7安装盘后开机启动失败问题
- 《血色浪漫》爆笑语录
- Filesystem之Linux系统文件命令精通指南(上)
- Liferay 4.2 Velocity 模板 render探索 (兼Java remote debug方法)
- 一个25岁董事长给程序员的18条忠告
- 缺陷跟踪
- 问题:全选后删除没有问题,DataGridViewCheckBoxColumn
- C# 静态成员和方法的学习小结
- 什么才是好工作
- OleDbParameter在Access数据库Insert时参数不对应的怪现象[友情提示]
- Filesystem之Linux系统文件命令精通指南(下)
- “在强签名的程序集上运行单元测试失败”问题调查
- 新的困境
- gtk+中对字体大小及颜色的修改
- linux 文件系统结构