怎么取消 dataGridView1 默认选中第一行!

zxvyio 2014-12-01 10:13:18
网上基本能搜到的都用上了,都不行,比如下面这些!之前在网上搜到过一个方法,但是当时没有COPY下来,现在搜来搜去搜不到了,那个方法,好像是当dataGridView1没有成为活动窗口时,不把焦点,还是什么的给dataGridView1,我也说不清楚,记忆中好像是这么一种迂回的方法,但具体怎么实现想不起来了,有人知道吗?

//dataGridView1.Rows[0].Selected = false; //放在Form1这里不起效果 可放在下面的Form1_Load中
this.button1.Focus();
}

private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Rows[0].Selected = false;

//this.dataGridView1.TabStop = false;
//dataGridView1.Rows[0].Selected = false;
//this.dataGridView1.CurrentCell = null;
//dataGridView1.ClearSelection();
}
...全文
1964 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2014-12-11
  • 打赏
  • 举报
回复
引用 24 楼 zxvyio 的回复:
引用 23 楼 youzelin 的回复:
表格不是用绑数据库来显示的,是自己一条条插入的!
我不管你是不是一条条插入,你要 focus 操作,必须是 DataSource != null 才能做的,这个你能理解吗?如果没有数据那就做都不用做。一条条插入,你就没插入都做一个 LastRow.Selected = true; 不就完了吗?什么叫没有满意答案?难道非要人家把完整的代码贴出来你才能知道吗?
youzelin 2014-12-11
  • 打赏
  • 举报
回复
引用 24 楼 zxvyio 的回复:
引用 23 楼 youzelin 的回复:
表格不是用绑数据库来显示的,是自己一条条插入的!
我不管你是不是一条条插入,你要 focus 操作,必须是 DataSource != null 才能做的,这个你能理解吗?如果没有数据那就做都不用做。一条条插入,你就没插入都做一个 LastRow.Selected = true; 不就完了吗?什么叫没有满意答案?难道非要人家把完整的代码贴出来你才能知道吗?
youzelin 2014-12-11
  • 打赏
  • 举报
回复
引用 24 楼 zxvyio 的回复:
引用 23 楼 youzelin 的回复:
表格不是用绑数据库来显示的,是自己一条条插入的!
我不管你是不是一条条插入,你要 focus 操作,必须是 DataSource != null 才能做的,这个你能理解吗?如果没有数据那就做都不用做。一条条插入,你就没插入都做一个 LastRow.Selected = true; 不就完了吗?什么叫没有满意答案?难道非要人家把完整的代码贴出来你才能知道吗?
zxvyio 2014-12-10
  • 打赏
  • 举报
回复
没有满意答案,结贴!
youzelin 2014-12-08
  • 打赏
  • 举报
回复
dataGridView1.Rows[(dataGridView1.DataSource as DataTable).Rows.Count - 1].Selected = true; 这个试过吗?反正我是试过了,okay 的。
youzelin 2014-12-08
  • 打赏
  • 举报
回复
不是 HitTest 事件,是在 MouseXXX 事件里面使用 HitTestInfo

    private DataGridViewCell clickedCell;

    private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
    {
	// If the user right-clicks a cell, store it for use by the shortcut menu. 
        if (e.Button == MouseButtons.Right)
        {
            DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
            if (hit.Type == DataGridViewHitTestType.Cell)
            {
                clickedCell =
                    dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
            }
        }
    }
youzelin 2014-12-08
  • 打赏
  • 举报
回复
好像现在的 DataGridView 有一个 HitTest 事件的,那个事件管用,比较实用,你试试那个
zxvyio 2014-12-08
  • 打赏
  • 举报
回复
引用 23 楼 youzelin 的回复:
表格不是用绑数据库来显示的,是自己一条条插入的!
youzelin 2014-12-08
  • 打赏
  • 举报
回复
引用 21 楼 zxvyio 的回复:
[quote=引用 19 楼 youzelin 的回复:] dataGridView1.Rows[(dataGridView1.DataSource as DataTable).Rows.Count - 1].Selected = true; 这个试过吗?反正我是试过了,okay 的。
这条显示“未将对象引用设置到对象的实例”。我这个表格没有绑DataTable,是自己取数据库后,控需要插入数据的! 这条语句和上面的好像没有什么区别哦,只是在变ROW的值! #18 娄的方法,无法在刚载入数据后就不选中第一行![/quote] 明显是绑定数据后做的事情啊。你不是想让他不focus 在第一条吗?第一条哪来,不就是先绑定数据吗?否则怎么 focus 啊?如果没数据那 DataSource 就是空,你可以判断的呀
zxvyio 2014-12-08
  • 打赏
  • 举报
回复
引用 20 楼 xuanbg 的回复:
难道不是GridView.FocusedRow = -1???
没找着 FocusedRow 参数!
zxvyio 2014-12-08
  • 打赏
  • 举报
回复
引用 19 楼 youzelin 的回复:
dataGridView1.Rows[(dataGridView1.DataSource as DataTable).Rows.Count - 1].Selected = true; 这个试过吗?反正我是试过了,okay 的。
这条显示“未将对象引用设置到对象的实例”。我这个表格没有绑DataTable,是自己取数据库后,控需要插入数据的! 这条语句和上面的好像没有什么区别哦,只是在变ROW的值! #18 娄的方法,无法在刚载入数据后就不选中第一行!
software_artisan 2014-12-08
  • 打赏
  • 举报
回复
难道不是GridView.FocusedRow = -1???
zxvyio 2014-12-07
  • 打赏
  • 举报
回复
顶顶,看还有没有出现过这种情况
熙风 2014-12-05
  • 打赏
  • 举报
回复
引用 11 楼 zxvyio 的回复:
[quote=引用 7 楼 happy09li 的回复:] [quote=引用 5 楼 zxvyio 的回复:] [quote=引用 3 楼 guwei4037 的回复:] this.dataGridView1.DataSource = dt.DefaultView; this.dataGridView1.ClearSelection();//在绑定数据源之后加上这么一句
我在加载完数据后连续用两条这个语句:

if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行"); }
            if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行2"); }
但是第二条的IF语句,还是运行了,显示“没有选中行2”,那说明第一条IF的Selected = true 没有起作用,怎么会这样呢?[/quote] 不要用DataGridView自带selected 判断,在mousedown时间里面写判断,[/quote] 这是表格加载完自动去除默认选中第一行,不能用mousedown来做![/quote] 你现在要的是判断,又不是要第一行不选中的效果,在mosedown中把当前选中的行记录起来
於黾 2014-12-05
  • 打赏
  • 举报
回复
加载完成后,加上 this.dataGridView1.ClearSelection();不就行了
zxvyio 2014-12-05
  • 打赏
  • 举报
回复
引用 13 楼 happy09li 的回复:
[quote=引用 11 楼 zxvyio 的回复:] [quote=引用 7 楼 happy09li 的回复:] [quote=引用 5 楼 zxvyio 的回复:] [quote=引用 3 楼 guwei4037 的回复:] this.dataGridView1.DataSource = dt.DefaultView; this.dataGridView1.ClearSelection();//在绑定数据源之后加上这么一句
我在加载完数据后连续用两条这个语句:

if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行"); }
            if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行2"); }
但是第二条的IF语句,还是运行了,显示“没有选中行2”,那说明第一条IF的Selected = true 没有起作用,怎么会这样呢?[/quote] 不要用DataGridView自带selected 判断,在mousedown时间里面写判断,[/quote] 这是表格加载完自动去除默认选中第一行,不能用mousedown来做![/quote] 你现在要的是判断,又不是要第一行不选中的效果,在mosedown中把当前选中的行记录起来[/quote] 刚好相反,是要第一行不选中的效果,不是要判断!上面的加载完简单的方法都试过了,都不行,有高级的方法吗?
zxvyio 2014-12-05
  • 打赏
  • 举报
回复
引用 12 楼 Z65443344 的回复:
加载完成后,加上 this.dataGridView1.ClearSelection();不就行了
就是死活不行啊,各种方法代码都用上了,就是不行!我这程序有5个dataGridView1,有两个很容易就搞定第一行不选中,有3个死活搞不上,
zxvyio 2014-12-04
  • 打赏
  • 举报
回复
引用 7 楼 happy09li 的回复:
[quote=引用 5 楼 zxvyio 的回复:] [quote=引用 3 楼 guwei4037 的回复:] this.dataGridView1.DataSource = dt.DefaultView; this.dataGridView1.ClearSelection();//在绑定数据源之后加上这么一句
我在加载完数据后连续用两条这个语句:

if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行"); }
            if (DINdataGridView.CurrentCell == null) { DINdataGridView.Rows[2].Selected = true; MessageBox.Show("没有选中行2"); }
但是第二条的IF语句,还是运行了,显示“没有选中行2”,那说明第一条IF的Selected = true 没有起作用,怎么会这样呢?[/quote] 不要用DataGridView自带selected 判断,在mousedown时间里面写判断,[/quote] 这是表格加载完自动去除默认选中第一行,不能用mousedown来做!
zxvyio 2014-12-04
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
你应该知道表格可以选中多个单元格的吧 Selected = true只是让这个单元格被选中,不代表当前单元格就变成它了

if (DINdataGridView.SelectedCells != null) { DINdataGridView.ClearSelection(); DINdataGridView.CurrentCell = null; MessageBox.Show("没有选中行"); }
if (DINdataGridView.SelectedCells != null) { DINdataGridView.ClearSelection(); DINdataGridView.CurrentCell = null; MessageBox.Show("没有选中行2"); }
经过这种修改后,把这两条代码放到加载数据之后,还是出现第2个MessageBox.Show("没有选中行2"); 而且DataGridView 的第一行还是蓝色的选中状态!
於黾 2014-12-04
  • 打赏
  • 举报
回复
你应该知道表格可以选中多个单元格的吧 Selected = true只是让这个单元格被选中,不代表当前单元格就变成它了
加载更多回复(7)

110,533

社区成员

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

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

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