DataGridView가있는 양식이 있습니다. 특정 조건에 따라 프로그래밍 방식으로 단일 행 선택을 취소합니다 (Selected
을 false
으로 설정). 그러나 그렇게 할 때 다른 행이 현재 선택되어 있으면 선택도 취소됩니다. DataGridView를 MultiSelect = false
으로 설정했습니다. 사용자는 한 행만 선택할 수 있어야합니다.특정 DataGridViewRow의 선택을 해제해도 다른 모든 행이 선택 취소되는 이유는 무엇입니까?
어떤 행의 Selected
속성을 설정하면 행을 선택하여 행을 선택하여 이전에 선택한 행의 선택을 해제하는 것으로 보입니다. 사실 false
으로 Selected
속성을 설정하면 해당 동작이 변경되지 않습니다. 이는 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;
}
}
왜 이런 일이 발생하는지 설명하지 않지만 답변을 수락했습니다. 나는 더 좋은 대답을 찾아 내지 못할 것이다. – comecme