高分求DataGridViewCheckBoxCell状态问题. 100求解!~~急..

wangping_li 2008-11-20 01:12:15

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
TransportOrderFullSDO data = bindingSource.Current as TransportOrderFullSDO;
if (Convert.ToBoolean(dataGridView.Rows[e.RowIndex].Cells["Check"].EditedFormattedValue) == true)
{
String VehicleNeedName = data.VehicleNeed.ToString();
Guid CompanyID = data.Company_ID;
foreach(DataGridViewColumn col in dataGridView.Columns)
{
if (col.HeaderText != "选择")
continue;
for (int k = 0; k < dataGridView.RowCount; k++)
{
Guid id = new Guid(dataGridView.Rows[k].Cells[1].Value.ToString());
if (id == CompanyID)
{
if (col.HeaderText == "运输方式")
{
if (dataGridView.Rows[k].Cells[col.Index].EditedFormattedValue.ToString() == VehicleNeedName)
dataGridView.Rows[k].Cells[0].ReadOnly = false;
else
dataGridView.Rows[k].Cells[0].ReadOnly = true;
}
}
else
{
dataGridView.EndEdit();
dataGridView.Rows[k].Cells[0].ReadOnly = true;
if(dataGridView.Rows[k].Cells[0].ReadOnly == true)
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Red;
else
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Blue;
}
}
}
}
else if (Convert.ToBoolean(dataGridView.Rows[e.RowIndex].Cells["Check"].EditedFormattedValue) == false)//不选中
{
//........
}
}
}

我要实现的是当在dataGridView选中一个客户后,就把其它客户的CheckBox为不可用(ReadOnly=true)
注意红色部,就是当我选中一个客户后其它把ReadOnly设为True,可是怎么不管怎么设,它还是可读的
我开先以为是没有取到值,于是加了一个if判断,当它的状态为可读的时候把该单元格背景色设为红色,现在我运行程序时
单元格已经为红色,可是ReadOnly还是为可读的.我搞不懂什么意思,高手些帮忙看看.谢谢.已经困惑我半天了.再次感谢了
...全文
201 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
net5i 2008-11-21
  • 打赏
  • 举报
回复
搂主应该改成使用CellClick事件

CellContentClick事件,没有内容或者点击的不是内容的时候是不会触发的
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lvg 的回复:]
请问楼主:

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)

这个是怎么触发的?
[/Quote]
确切的说应该是我点击check框的时候
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
点击单元格的时候
lvg 2008-11-20
  • 打赏
  • 举报
回复
请问楼主:

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)

这个是怎么触发的?
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
郁闷啊,居然没人来看
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bloodish 的回复:]
引用 8 楼 wangping_li 的回复:
引用 6 楼 bloodish 的回复:
不是很明白你的意思
你可以把整列设为ReadOnly,Cell值的改变在CellContentClick做
把所有非当前列的cell的值全变为false

C# code
for(int index=0;index <dataGridView1.Rows.Count;index++)
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = (index == e.RowIndex);
}

这样的话就和意思不符了哦,是以当前选中列的名称…

在循环里你做一下判断不就可以了,现在只判断了index==e.RowIndex,其他判断你可以自己加进去
[/Quote]
现在不是这个问题,你具体看一下我五楼的回答,原问题
我已经取到ReadOnly的值为True了,就是说假如:
现在选中第一列,第二列的名称与第一列的名称不一样,已经把它的ReadOnly设为True了(即可读了),为什么还可以编辑?
liubin911 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangping_li 的回复:]
值是True啊
if(dataGridView.Rows[k].Cells[0].ReadOnly == true)
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Red; //这一句都执行到了,所以值的话毫无悬念了
else
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Blue;
[/Quote]

没大看懂,不知道是不是这样


if(dataGridView.Rows[k].Cells[0].ReadOnly == true)
{
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Red;
dataGridView.Rows[k].Cells[0].ReadOnly = false;

}
else
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Blue;
bloodish 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangping_li 的回复:]
引用 6 楼 bloodish 的回复:
不是很明白你的意思
你可以把整列设为ReadOnly,Cell值的改变在CellContentClick做
把所有非当前列的cell的值全变为false

C# code
for(int index=0;index <dataGridView1.Rows.Count;index++)
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = (index == e.RowIndex);
}

这样的话就和意思不符了哦,是以当前选中列的名称为条件,所有和当前选中列名称一样…
[/Quote]

在循环里你做一下判断不就可以了,现在只判断了index==e.RowIndex,其他判断你可以自己加进去
GingerPiety 2008-11-20
  • 打赏
  • 举报
回复
学习,学习
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bloodish 的回复:]
不是很明白你的意思
你可以把整列设为ReadOnly,Cell值的改变在CellContentClick做
把所有非当前列的cell的值全变为false

C# code
for(int index=0;index<dataGridView1.Rows.Count;index++)
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = (index == e.RowIndex);
}
[/Quote]
这样的话就和意思不符了哦,是以当前选中列的名称为条件,所有和当前选中列名称一样的都可用,其余的不可用
quanhuang98bisha 2008-11-20
  • 打赏
  • 举报
回复
帮顶!
bloodish 2008-11-20
  • 打赏
  • 举报
回复
不是很明白你的意思
你可以把整列设为ReadOnly,Cell值的改变在CellContentClick做
把所有非当前列的cell的值全变为false

for(int index=0;index<dataGridView1.Rows.Count;index++)
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = (index == e.RowIndex);
}
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
值是True啊
if(dataGridView.Rows[k].Cells[0].ReadOnly == true)
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Red; //这一句都执行到了,所以值的话毫无悬念了
else
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Blue;
coder2010 2008-11-20
  • 打赏
  • 举报
回复
我没遇到过!你断点调试一下啊!看看它的值!
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
没人会?还是没人遇到过?这个问题很严重,我就不信在项目都没需过这样的需求
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
不要沉啊,快来人看看
我迷惑啊.明明为只读了,为什么还是可以用?
难道单元格为只读时里面的控件还可以用?这说不过去啊..
wangping_li 2008-11-20
  • 打赏
  • 举报
回复
if (id == CompanyID)
{
if (col.HeaderText == "运输方式")
{
if (dataGridView.Rows[k].Cells[col.Index].EditedFormattedValue.ToString() == VehicleNeedName)
dataGridView.Rows[k].Cells[0].ReadOnly = false;
else
dataGridView.Rows[k].Cells[0].ReadOnly = true;
}
}
else
{
dataGridView.EndEdit();
dataGridView.Rows[k].Cells[0].ReadOnly = true;
if(dataGridView.Rows[k].Cells[0].ReadOnly == true)
{
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Red;
else
dataGridView.Rows[k].Cells[0].Style.BackColor = Color.Blue;
}


上面我加了颜色怎么没用?CSDN搞什么东东..重新发

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧