私は DataGridView を持つフォームを持っています。特定の条件に基づいて、プログラムで単一の行の選択を解除します (に設定Selected
することによりfalse
)。しかし、それを行うと、別の行が現在選択されている場合、その行も選択解除されます。DataGridView を に設定しましたMultiSelect = false
。ユーザーは単一の行のみを選択できる必要があります。
行のSelected
プロパティを設定すると、コントロールは行を選択していると認識し、以前に選択した行を選択解除するようです。Selected
プロパティをに設定しているという事実は、false
その動作を変更しません。MultiSelect
これは、が に設定されfalse
、SelectionMode
が に設定されている場合にのみ発生 しFullRowSelect
ます。
現在の場合、プロパティを設定するだけで解決できますtrue
。
if (row.Selected) row.Selected = false;
しかし、なぜこれが起こるのか知りたいです。また、SelectionMode が FullRowSelect に設定されている場合のみ、なぜですか?
完全な例
次のサンプル コードには、完全な動作例が含まれています。コンストラクターは 3 つの行を追加します。ボタンをクリックすると、中央の行の選択が解除されます。ただし、ボタンをクリックする前にどの行が選択されていても、最終的には行が選択されていません。
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;
}
}