dataGridView问题???

修改一下昵称 2009-05-13 10:54:25
一个dataGridView中,我想某些单元格不能选择,比如就像控件的Enabled属性设为false一样,单击它没有响应!
这个怎么实现?
...全文
200 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
修改一下昵称 2009-05-15
  • 打赏
  • 举报
回复
刚刚经过我的一些修改,和测试,在我的程序里完全可以达到我要的那个效果了。

非常感谢25楼!

问题解决,结贴去!!
修改一下昵称 2009-05-15
  • 打赏
  • 举报
回复
先谢谢你了,这样确实可以达到我要的那个效果了。
tanjian0503 2009-05-15
  • 打赏
  • 举报
回复
再次能交流到不少东西啊
welcomechenqi 2009-05-15
  • 打赏
  • 举报
回复
查下帮助文档里的属性
duping9626 2009-05-14
  • 打赏
  • 举报
回复
效果像是没反应,不过只是为了达到这样的效果,直接用可能不行,可能会有其它的没考虑的问题

//第二行,第二列,选中无反应效果
private void Form_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("a", typeof(string));
dt.Columns.Add("b", typeof(string));

dt.Rows.Add(new object[] { "fad", "fdfsdf" });
dt.Rows.Add(new object[] { "fad", "fdfsdf" });
dt.Rows.Add(new object[] { "fad", "fdfsdf" });
dt.AcceptChanges();
this.dataGridView1.DataSource = dt;

this.dataGridView1[1, 1].ReadOnly = true;
}

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if ((e.RowIndex == 1) && (e.ColumnIndex == 1) &&
((e.PaintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background)
)
{

SolidBrush bush = new SolidBrush(e.CellStyle.BackColor);
try
{
e.Graphics.FillRectangle(bush, e.CellBounds);
}
finally
{
bush.Dispose();
}

DataGridViewPaintParts paintparts = e.PaintParts & (~DataGridViewPaintParts.Background);
paintparts = paintparts & (~DataGridViewPaintParts.Focus);
paintparts = paintparts & (~DataGridViewPaintParts.SelectionBackground);

e.Paint(e.CellBounds, paintparts);
TextRenderer.DrawText(e.Graphics, e.FormattedValue.ToString() , e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor, e.CellStyle.BackColor,TextFormatFlags.Left | TextFormatFlags.VerticalCenter);

e.Handled = true;
}
}
CeleryZeng 2009-05-14
  • 打赏
  • 举报
回复
我是将字段换成模版
在rowdatabind里面实现就可以了

Label l = e.Row.Cells[5].Controls[1] as Label;
l.Enabled = false;
修改一下昵称 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 Dobzhansky 的回复:]
引用 22 楼 yhb417 的回复:
等待高手来解决问题。。


不知道你为啥要这个功能, 只读不够?
[/Quote]
能实现是最好咯。
我想了一下,看能不能根据鼠标移动到某个单元格的事件来屏蔽鼠标左键??
Kkiki 2009-05-14
  • 打赏
  • 举报
回复
编辑模板中 去掉textBox 换成 label
Dobzhansky 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 yhb417 的回复:]
等待高手来解决问题。。
[/Quote]

不知道你为啥要这个功能, 只读不够?
footprint2008 2009-05-14
  • 打赏
  • 举报
回复
这个好像没有这样的属性.但可以设置为只读.
DataGridView dgv = new DataGridView();
dgv[i, i].ReadOnly = true; //单元格只读第(i+1)列第(i+1)行只读
dgv.Columns[i].ReadOnly = true; //第(i+1)列只读
shui8iuhs 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 outou 的回复:]
代码来自http://bingning.net/VB/SOURCE/datagridview/readonly.html
根据条件单元格不能编辑

C# code
//CellBeginEdit事件处理器
private void DataGridView1_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//判断是否可以编辑
if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
!(bool)dgv["Column2", e.Ro…
[/Quote]

同意,正解,这种方法可行。
修改一下昵称 2009-05-14
  • 打赏
  • 举报
回复
等待高手来解决问题。。
outou 2009-05-14
  • 打赏
  • 举报
回复
代码来自http://bingning.net/VB/SOURCE/datagridview/readonly.html
根据条件单元格不能编辑

//CellBeginEdit事件处理器
private void DataGridView1_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//判断是否可以编辑
if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
!(bool)dgv["Column2", e.RowIndex].Value)
{
//编辑不能
e.Cancel = true;
}
}



(0, 0)的单元格只读

//DataGridView1的(0, 0)的单元格只读
DataGridView1[0, 0].ReadOnly = true;

zjl0422 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Kkiki 的回复:]
编辑模板中 去掉textBox 换成 label
[/Quote]
这样也可以吗?
zjl0422 2009-05-14
  • 打赏
  • 举报
回复
up
修改一下昵称 2009-05-14
  • 打赏
  • 举报
回复
......
修改一下昵称 2009-05-14
  • 打赏
  • 举报
回复
...
修改一下昵称 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wuyq11 的回复:]
if (dgv.Columns[e.ColumnIndex].Name == "Column1" && !(bool)dgv["Column2", e.RowIndex].Value)
{
e.Cancel = true;
}
或 ReadOnly = true;
[/Quote]
不是让它不能编辑,我是想让它单击没响应,就像用右键单击单元格一样!
wuyq11 2009-05-14
  • 打赏
  • 举报
回复
if (dgv.Columns[e.ColumnIndex].Name == "Column1" && !(bool)dgv["Column2", e.RowIndex].Value)
{
e.Cancel = true;
}
或 ReadOnly = true;
cjdxhc 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yhb417 的回复:]
.
[/Quote]

设置每列的ReadOnly属性为true即可!
加载更多回复(9)

110,502

社区成员

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

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

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