MultipleSelect DataGridView c#
MultipleSelect DataGridView c#
我似乎有一些类似的问题,但不完全是这样。我试图在只有一列和多行的 DataGridView 中创建多个 selection。我希望能够通过正常单击(不按 Ctrl)来 select 和取消 select,并且 selection 保持不变,直到我再次单击。我得到了
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add();
dataGridView1.Rows.Add();
dataGridView1.Rows.Add();
}
DataGridView1.MultipleSelect = true;
DataGridView1.SelectMode = GridViewSelectMode.SelectCells;
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//handle the keep select/unselect group
}
但是如何设置不使用Ctrl键保持select离子的条件呢?谢谢
您可以 select 通过稍微调整网格的配色方案来自己 select 单元格,然后 store/remove 它们 in/from 单击它们时的列表:
public partial class Form1 : Form
{
/// <summary>
/// Currently selected cells.
/// </summary>
private List<DataGridViewCell> _selectedCells = new List<DataGridViewCell>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
/* Just for test
dataGridView1.Columns.Add("A", "ColA");
dataGridView1.Columns.Add("B", "ColB");
dataGridView1.Columns.Add("C", "ColC");
dataGridView1.Columns.Add("D", "ColD");
dataGridView1.Rows.Add("A1","B1","C1","D1");
dataGridView1.Rows.Add("A2", "B2", "C2", "D2");
dataGridView1.Rows.Add("A3", "B3", "C3", "D3");
dataGridView1.Rows.Add("A4", "B4", "C4", "D4");
dataGridView1.Rows.Add("A5", "B5", "C5", "D5");
dataGridView1.Rows.Add("A6", "B6", "C6", "D6");
*/
dataGridView1.MultiSelect = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
// Edited and added this line to avoid problems when clicking on the header.
if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
// Clears all the selected cells.
dataGridView1.ClearSelection();
if (_selectedCells.Contains(dataGridView1[e.ColumnIndex, e.RowIndex]))
{
_selectedCells.Remove(dataGridView1[e.ColumnIndex, e.RowIndex]);
dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = dataGridView1.DefaultCellStyle.BackColor;
}
else
{
_selectedCells.Add(dataGridView1[e.ColumnIndex, e.RowIndex]);
dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = dataGridView1.DefaultCellStyle.SelectionBackColor;
}
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
dataGridView1.BeginEdit(true);
}
}
我似乎有一些类似的问题,但不完全是这样。我试图在只有一列和多行的 DataGridView 中创建多个 selection。我希望能够通过正常单击(不按 Ctrl)来 select 和取消 select,并且 selection 保持不变,直到我再次单击。我得到了
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add();
dataGridView1.Rows.Add();
dataGridView1.Rows.Add();
}
DataGridView1.MultipleSelect = true;
DataGridView1.SelectMode = GridViewSelectMode.SelectCells;
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//handle the keep select/unselect group
}
但是如何设置不使用Ctrl键保持select离子的条件呢?谢谢
您可以 select 通过稍微调整网格的配色方案来自己 select 单元格,然后 store/remove 它们 in/from 单击它们时的列表:
public partial class Form1 : Form
{
/// <summary>
/// Currently selected cells.
/// </summary>
private List<DataGridViewCell> _selectedCells = new List<DataGridViewCell>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
/* Just for test
dataGridView1.Columns.Add("A", "ColA");
dataGridView1.Columns.Add("B", "ColB");
dataGridView1.Columns.Add("C", "ColC");
dataGridView1.Columns.Add("D", "ColD");
dataGridView1.Rows.Add("A1","B1","C1","D1");
dataGridView1.Rows.Add("A2", "B2", "C2", "D2");
dataGridView1.Rows.Add("A3", "B3", "C3", "D3");
dataGridView1.Rows.Add("A4", "B4", "C4", "D4");
dataGridView1.Rows.Add("A5", "B5", "C5", "D5");
dataGridView1.Rows.Add("A6", "B6", "C6", "D6");
*/
dataGridView1.MultiSelect = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
// Edited and added this line to avoid problems when clicking on the header.
if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
// Clears all the selected cells.
dataGridView1.ClearSelection();
if (_selectedCells.Contains(dataGridView1[e.ColumnIndex, e.RowIndex]))
{
_selectedCells.Remove(dataGridView1[e.ColumnIndex, e.RowIndex]);
dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = dataGridView1.DefaultCellStyle.BackColor;
}
else
{
_selectedCells.Add(dataGridView1[e.ColumnIndex, e.RowIndex]);
dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = dataGridView1.DefaultCellStyle.SelectionBackColor;
}
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
dataGridView1.BeginEdit(true);
}
}