我有一个包含30行和12列的Gridview,多选真实和选择模式:单元格选择。 我想做以下事情:
a)当用户选择单元格时,单元格的颜色应该改变。但是我想限制用户,这样它一次只能从单行中选择多个单元格,即用户不能在不同的行中选择多个单元格。
b)如果用户连续选择多个单元格,则颜色会发生变化,单元格将保持选中状态,直到用户重新选择它以更改为删除颜色更改(取消选择默认颜色)。现在,如果用户选择某些单元格,它的颜色会发生变化,但是当用户移动选择其他单元格时,之前选择的单元格将更改回默认颜色(自动取消选择)。
现在我可以更改所选单元格的颜色,但我无法满足上述条件。
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
dataGridView1.Rows[row.Index].DefaultCellStyle.SelectionBackColor = Color.Pink;
}
}
[更新]:我试过这个,但仍然无法解决我的问题
private void dataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
List<DataGridViewRow> rowCollection = new List<DataGridViewRow>();
foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
{
rowCollection.Add(dataGridView1.Rows[cell.RowIndex]);
}
foreach (DataGridViewRow row in rowCollection)
{
dataGridView1.Rows[row.Index].DefaultCellStyle.SelectionBackColor = Color.Pink;
}
}
答案 0 :(得分:0)
我建议查看DataGridViews的默认事件。根据条件的声音,您需要一个选定单元格的列表(或者可能已经在您可以评估的Cell对象上有一个标志),并且您将要为Cell Click事件添加事件处理程序。因此,您可以针对要单击的新单元格检查“selectedCells”列表中单元格的行。如果它们是相同的,你可以为那个细胞着色。您还可以检查列表中是否存在该单元格,表明您要删除着色。
希望这有帮助! :)
答案 1 :(得分:0)
a)您可以使用DataGridView
SelectionChanged
事件完成此操作:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
int currentRowIndex = dataGridView1.CurrentCell.RowIndex;
foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
if (cell.RowIndex != currentRowIndex)
cell.Selected = false;
}
b)你的问题对我来说并不清楚。它看起来与a)相同。顺便说一句,您可以通过按住CTRL键在DataGridView
中选择多个单元格。
最后,不要使用DefaultCellStyle.SelectionBackColor
,这很慢。我建议您处理DataGridView
的{{1}}事件以对单元格进行着色:
CellPainting