我有一个带有 DataGridView 的表单。根据某些条件,我以编程方式取消选择单个行(通过设置Selected
为false
)。但是当我这样做时,如果当前选择了另一行,它也会被取消选择。我已将 DataGridView 设置为MultiSelect = false
. 用户应该只能选择一行。
似乎设置任何行的Selected
属性会导致控件将其视为选择行,从而取消选择任何先前选择的行。我将Selected
属性设置为这一事实false
并没有改变这种行为。MultiSelect
这仅在设置为false
和SelectionMode
设置为时才会发生 FullRowSelect
。
我可以通过仅设置当前属性来解决它true
。
if (row.Selected) row.Selected = false;
但我想知道为什么会这样。为什么只有当 SelectionMode 设置为 FullRowSelect 时?
完整示例
以下示例代码包含一个完整的工作示例。构造函数将添加三行。单击该按钮将取消选择中间行。但是无论在单击按钮之前选择了哪一行,最终的结果都是没有选择任何行。
using System;
using System.Windows.Forms;
class MainForm : Form
{
static void Main() { Application.Run(new MainForm()); }
private DataGridView _dataGridView;
private Button _SelectButton;
public MainForm()
{
_dataGridView = new DataGridView
{ ReadOnly = true, AllowUserToAddRows = false };
_dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
_dataGridView.Dock = DockStyle.Fill;
_dataGridView.MultiSelect = false;
_dataGridView.Columns.Add(new DataGridViewColumn
{ CellTemplate = new DataGridViewTextBoxCell() });
_dataGridView.Rows.Add("1");
_dataGridView.Rows.Add("2");
_dataGridView.Rows.Add("3");
Controls.Add(_dataGridView);
_SelectButton = new Button { Text = "Deselect middle row" };
_SelectButton.Click += _SelectButton_Click;
_SelectButton.Dock = DockStyle.Bottom;
Controls.Add(_SelectButton);
}
void _SelectButton_Click(object sender, EventArgs e)
{
_dataGridView.Rows[1].Selected = false;
}
}