C# 使用DataGridView时不要将焦点默认放到第一行第一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 使用DataGridView时不要将焦点默认放到第一行第一列相关的知识,希望对你有一定的参考价值。

C# 使用DataGridview显示数据库中显示的数据,总是默认选中第一行第一列,且 dgv.CurrentRow.Index=0.
请教一下,我怎样才能取消这个默认选定。
PS:dgv.CurrentCell.Selected=false、dgv.Rows[0].Selected = false、dgv.ClearSelection()=true我都已经试过了,没用,虽然可以将选中的蓝色背景去掉,但实际上dgv.CurrentRow.Index仍然是0.

参考技术A dgv.CurrentCell =null;
用这个可以使datagridview不选中任何记录,我就是用这个实现取消默认焦点的。本回答被提问者采纳
参考技术B /*取消当前选择的单元格将新添加的设置为默认选择*/
dgv.ClearSelection();
dgv.CurrentCell = dgvCustomer.Rows[1].Cells[0];
参考技术C dgv.ClearSelection();

这个绝对好使 写在绑定后面
参考技术D dgv.ClearSelection();

使用键盘选择 onchange - 在焦点消失之前不要触发 onchange 事件?

【中文标题】使用键盘选择 onchange - 在焦点消失之前不要触发 onchange 事件?【英文标题】:Select onchange with keyboard - do not trigger onchange event until focusout? 【发布时间】:2019-02-28 05:15:36 【问题描述】:

我有一个绑定到更改事件的选择,以便在进行选择时将用户带到新页面。鼠标没问题,但是当我尝试使用键盘的箭头键进行选择时,更改事件会在我按下箭头时触发,而不是等待我退出,所以我只能选择第一个选项我的键盘。

$selectLocation.on('change', function() 
    location.href = '/data#' + $(this).val().toUpperCase();
);

如何区分更改功能上的点击和按键,或者使更改功能在按键时不触发?

【问题讨论】:

嘿,Erica,你找到解决方案了吗? 【参考方案1】:

考虑以下sn-p:

// Sets the redirect based on user activity on #test.
$('#test').on('change', function(e) 
 if ($(this).data('clicked')) 
    // A click was used to change the select box, redirect.
    console.log('clicked redirect');
  
);

// Sets data-keypressed on #test when the down or up arrow key is pressed.
$('#test').on('keydown', function(e) 
  var code = e.keyCode || e.which;
  
  if (code === 38 || code === 40) 
    // Reset data-clicked.
    $(this).data('clicked', false);
    // Bind focusout to the redirect.
    $('#test').unbind('focusout').bind('focusout', function(e) 
      if ($(this).val !== '') 
        // An option is selected.
        console.log('keyboard focusout redirect');
      
    );
  
);

// Sets data-clicked on #test.
$('#test').on('click', function(e) 
  // Unbind the focusout event added in the change handler.
  $(this).unbind('focusout');
  // Set data-clicked to be used in the change handler.
  $(this).data('clicked', true);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="test" data-clicked="false">
<option value="">-- Select an Option --</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

这个 sn-p 使用 HTML data 属性来设置选择框是否被 click 更改,并在 @987654326 上更改选择框时在选择框上设置 focusout 事件@。重定向将在单击选择时立即发生,但使用键盘时只会在选择框被聚焦并选择一个值时发生。

【讨论】:

【参考方案2】:

由于选择导致(在您的情况下)导航,最简单的解决方案是避免更改事件。而是保存初始值并在单击或模糊时与当前值进行比较。

var defaultValue = $('#select').val();
$('#select').focus();
$('#select').on('click blur', function(event) 
  if (defaultValue === $(this).val()) 
    return
  
  // no need to save with location.href
  defaultValue = $(this).val()
  console.log($(this).val());
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="option" id="select">
<option value="1">1</option>
<option value="2">2</option>
</select>

【讨论】:

以上是关于C# 使用DataGridView时不要将焦点默认放到第一行第一列的主要内容,如果未能解决你的问题,请参考以下文章

c# winform datagridview首次加载默认显示的问题

C# datagridview 单元格内值改变时触发了哪些事件?(winform)

C# winForm 将datagridview 控件中的数据(大约有六千行甚至更多),导入到listview中显示时,卡死了。

如何在 DataGridView c# 中移动光标

焦点时DataGridView ComboBox不保存

将焦点设置到新插入或更新的datagridview中的一行?