可能是你控件采用全局的ReadOnly模式了,要想要可以勾选,又要只读模式,那么你必须一列一列的设置readonly属性全部true除了了你check列为false
一下是常用的处理方式,仅供参考
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//测试数据()
dataGridView1.Rows.Add(new object[]{false,"删除","修改"});
dataGridView1.Rows.Add(new object[] { false, "删除1", "修改1" });
dataGridView1.Rows.Add(new object[] { false, "删除2", "修改2" });
}
//dataGridView的单元格点击事件
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1&&e.ColumnIndex>0)
{
bool ischecked=(bool)dataGridView1.Rows[e.RowIndex].Cells[0].Value;
// 其中dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex>]就是你当前点击的行对象,你可以得到点击行的ID,值等你想要的信息,然后做后续操作就可以了
if (ischecked)
{
switch (e.ColumnIndex)
{
case 1://这里弹出删除的窗口
MessageBox.Show("你点击了删除按钮");
break;
case 2://这里填写你跳转的窗口代码
MessageBox.Show("你点击了修改按钮");
break;
}
}
else
MessageBox.Show("请先勾选,然后进行操作!");
}
}
}
}
具体效果就是这样的,3列 分别是 第一列 checkBox,第2,3列都是button列
我这个采用的列选项,列按钮来做,用户体验会更好的!!
两种方案:
给每一个CheckBox绑定一个ID在触发DataGridViewCheckBoxColumn时候将ID获取到放置于一个数组里面然后点击修改或者删除时候直接对数组进行操作,需要注意的是在取消选择的时候需要将数组中对应的值移除。
不使用DataGridViewCheckBoxColumn这个方法,在点击修改或删除时候,读取DataGridView第一行的数据,然后进行遍历找到所有选中的CheckBox找到对应的操作ID进行修改或删除(建议使用第一种方式)
两种方案:
给每一个CheckBox绑定一个ID在触发DataGridViewCheckBoxColumn时候将ID获取到放置于一个数组里面然后点击修改或者删除时候直接对数组进行操作,需要注意的是在取消选择的时候需要将数组中对应的值移除。
不使用DataGridViewCheckBoxColumn这个方法,在点击修改或删除时候,读取DataGridView第一行的数据,然后进行遍历找到所有选中的CheckBox找到对应的操作ID进行修改或删除(建议使用第一种方式)