DataGridView单击一行的问题

hejialin666 2010-02-24 10:09:44
在DataGridView的Click事件中写如下代码
MessageBox.Show(dataGridView1.CurrentRow.Index.ToString());

可是在我点击DataGridView的标题栏时也弹出了一个数字,这个数字是我最后点击的那一行。

不想让点击标题栏也触发事件,怎么处理?
...全文
438 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 20 楼 yingyuebingya 的回复:
C# codeprivatevoid dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{if (e.RowIndex>=0&& e.ColumnIndex>=0)
{
MessageBox.Show(e.RowIndex.ToString(?-


正解!!采纳!
zishanyan 2010-02-24
  • 打赏
  • 举报
回复
引用 9 楼 nimingxin1987 的回复:
那就用CellClick
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //你要的操作   
            }
        }

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex != -1)
{
//你要的操作
}
}



9楼的方法是可行的,改成这样点击行头的时候也就不会触发事件了
yingyuebingya 2010-02-24
  • 打赏
  • 举报
回复

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
MessageBox.Show(e.RowIndex.ToString()+ " , " + e.ColumnIndex.ToString());
}
}
sean_zhou 2010-02-24
  • 打赏
  • 举报
回复
这个是对的,楼主可以试试,呵呵,我翻了很多资料都没找到,这个回答不错。
引用 9 楼 nimingxin1987 的回复:
那就用CellClick
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //你要的操作   
            }
        }
nimingxin1987 2010-02-24
  • 打赏
  • 举报
回复
if (e.RowIndex >= 0)
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 13 楼 joan1027 的回复:
引用 7 楼 hejialin666 的回复:引用 2 楼 nimingxin1987 的回复: 用CellContentClick事件 Click事件是点击控件就会触发 CellContentClick是点击单元格 这样不好,这个事件是要点击单元格的内容时才会触发。内容少,单元格长就不行了。

内容少,单元格长应该跟获取到的行的索引没有直接联系吧,点击任何一个单元格中的任何一个位置都一样获取到行的索引。点击第一行第一列和第一行第二列获取到的行索引是一样的。

CellContentClick事件是点击单元格的内容时才会触发,我现在要的效果是:点击一行要触发。不管点击的是不是内容还是这个单元格的其它部分。

但是 不是标题哦!
joan1027 2010-02-24
  • 打赏
  • 举报
回复
引用 13 楼 joan1027 的回复:
引用 7 楼 hejialin666 的回复:
引用 2 楼 nimingxin1987 的回复:
用CellContentClick事件
Click事件是点击控件就会触发
CellContentClick是点击单元格
这样不好,这个事件是要点击单元格的内容时才会触发。内容少,单元格长就不行了。

内容少,单元格长应该跟获取到的行的索引没有直接联系吧,点击任何一个单元格中的任何一个位置都一样获取到行的索引。点击第一行第一列和第一行第二列获取到的行索引是一样的。


用CellClick事件
nimingxin1987 2010-02-24
  • 打赏
  • 举报
回复
引用 11 楼 hejialin666 的回复:
引用 9 楼 nimingxin1987 的回复:那就用CellClick         private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)         {             if (e.RowIndex >= 0)             {                 //你要的操作                }         }

用这个事件就会发生我说的情况的,点击标题栏也触发事件的。你可以试一下!

if (e.RowIndex >= 0)
你确定你跟我写的一样?
主要是这句话,你可以试一下!
header的index是-1!
zishanyan 2010-02-24
  • 打赏
  • 举报
回复
楼主的标题栏是指什么,列头还是行头,我用CellClick事件的时候点击行头是选中一行并触发事件,但是点击列头并不会触发事件
joan1027 2010-02-24
  • 打赏
  • 举报
回复
引用 7 楼 hejialin666 的回复:
引用 2 楼 nimingxin1987 的回复:
用CellContentClick事件
Click事件是点击控件就会触发
CellContentClick是点击单元格
这样不好,这个事件是要点击单元格的内容时才会触发。内容少,单元格长就不行了。


内容少,单元格长应该跟获取到的行的索引没有直接联系吧,点击任何一个单元格中的任何一个位置都一样获取到行的索引。点击第一行第一列和第一行第二列获取到的行索引是一样的。
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 10 楼 jiyan1221 的回复:
找一下点击标题栏时候的获得的Index值的规律,然后想办法加一个判断,当点击的是标题栏的时候不执行弹出窗口操作,或者干脆提示说点击到了标题栏。

这个规律不太好找,它弹出的是最后一次点击行的行号。这个不确定性太多了!
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 9 楼 nimingxin1987 的回复:
那就用CellClick
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //你要的操作   
            }
        }


用这个事件就会发生我说的情况的,点击标题栏也触发事件的。你可以试一下!
jiyan1221 2010-02-24
  • 打赏
  • 举报
回复
找一下点击标题栏时候的获得的Index值的规律,然后想办法加一个判断,当点击的是标题栏的时候不执行弹出窗口操作,或者干脆提示说点击到了标题栏。
nimingxin1987 2010-02-24
  • 打赏
  • 举报
回复
那就用CellClick
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
//你要的操作
}
}
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 6 楼 bingjiecai 的回复:
参考:
http://school.itzcn.com/special-spid-51.html

不是吧!这是教课的?我看到猴年了!
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 2 楼 nimingxin1987 的回复:
用CellContentClick事件
Click事件是点击控件就会触发
CellContentClick是点击单元格

这样不好,这个事件是要点击单元格的内容时才会触发。内容少,单元格长就不行了。
nimingxin1987 2010-02-24
  • 打赏
  • 举报
回复
引用 4 楼 hejialin666 的回复:
引用 1 楼 gouhan02 的回复:否能找到行所对应的索引值?
能找到,不过点击标题也找到了一个索引值,这似乎是不对的。
希望能让点击标题时不找到索引值,或者不触发事件最好!

2楼肯定对
hejialin666 2010-02-24
  • 打赏
  • 举报
回复
引用 1 楼 gouhan02 的回复:
否能找到行所对应的索引值?

能找到,不过点击标题也找到了一个索引值,这似乎是不对的。
希望能让点击标题时不找到索引值,或者不触发事件最好!
gouhan02 2010-02-24
  • 打赏
  • 举报
回复
Click事件应该是无论是gridview控件的任何区域都会触发的,你既然要对应到行才让它触发,那么你可以先找到对应的行。如果找不到行,就不触发它了。
nimingxin1987 2010-02-24
  • 打赏
  • 举报
回复
用CellContentClick事件
Click事件是点击控件就会触发
CellContentClick是点击单元格
加载更多回复(3)

110,536

社区成员

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

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

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