Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择datagridview行中的所有单元格时,请将该行设置为selected as属性_C#_Datagridview - Fatal编程技术网

C# 选择datagridview行中的所有单元格时,请将该行设置为selected as属性

C# 选择datagridview行中的所有单元格时,请将该行设置为selected as属性,c#,datagridview,C#,Datagridview,简单地说-我想处理datagridview的SelectionChanged事件,如果当前一行或多行的所有单元格都被选中,则将行属性“selected”设置为true,如果选择发生更改,但尚未选中所有单元格,则取消选中该行。我可以通过一系列的检查和循环手动完成,但我不认为这应该有那么难。提前谢谢!对于这个愚蠢的问题,很抱歉…这应该可以解决问题: // Your property to get the current state from. public bool IsChecked = fals

简单地说-我想处理datagridview的SelectionChanged事件,如果当前一行或多行的所有单元格都被选中,则将行属性“selected”设置为true,如果选择发生更改,但尚未选中所有单元格,则取消选中该行。我可以通过一系列的检查和循环手动完成,但我不认为这应该有那么难。提前谢谢!对于这个愚蠢的问题,很抱歉…

这应该可以解决问题:

// Your property to get the current state from.
public bool IsChecked = false;

private void RowSelected()
{
    // Count all selected cells that have the same row-index as the first cell.
    int cellsSelected = datagridview.SelectedCells.Cast<DataGridViewCell>().Select(x => x).Where(x => x.RowIndex == datagridview.SelectedCells[0].RowIndex).Count();
    // If count of cells == count of columns -> all cells are selected.
    IsChecked = (cellsSelected == datagridview.Columns.Count) ? true : false;
}

public void DataGridView_SelectionChanged(object sender, EventArgs e)
{
    // Will take care for the switch.
    RowSelected();
}
//要从中获取当前状态的属性。
公共布尔值已检查=false;
私有无效行已选定()
{
//对与第一个单元格具有相同行索引的所有选定单元格进行计数。
int cellsSelected=datagridview.SelectedCells.Cast().Select(x=>x).Where(x=>x.RowIndex==datagridview.SelectedCells[0].RowIndex.Count();
//如果单元格计数==列计数->选择所有单元格。
IsChecked=(cellsSelected==datagridview.Columns.Count)?true:false;
}
public void DataGridView_SelectionChanged(对象发送方,事件参数e)
{
//我会小心开关的。
行选择();
}

当我说可以通过这种方式完成时,我的意思正是这样,只需进行几次检查和循环。但是你确定这是唯一合适的方法,也是最好的方法吗?无论如何,谢谢你的代码@D.Petrov的“一对”听起来很像5种方法和3种if-else语句。事实上,这一行只有一行对单元格进行计数,一行决定计数是否意味着整行。考虑到holding变量,您有3行代码。不太喜欢,嗯?为什么不直接将
DataGridView
设置为
FullRowSelect
?您需要选择单个单元格的功能吗?