C# 取消选择datagridview中的所有行

C# 取消选择datagridview中的所有行,c#,winforms,datagridview,selection,rows,C#,Winforms,Datagridview,Selection,Rows,我有两个datagridview,当我单击其中一个时,我想在第二个datagridview中取消选择所有选择,我尝试了这一点,但没有任何效果: firstItemsDataGridView.ClearSelection(); firstItemsDataGridView.CurrentCell = null; 不起作用, firstItemsDataGridView.ClearSelection(); if (firstItemsDataGridView.Rows.Count > 0)

我有两个datagridview,当我单击其中一个时,我想在第二个datagridview中取消选择所有选择,我尝试了这一点,但没有任何效果:

firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;
不起作用,

firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
    firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
    item.Selected = false;

    foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
        itemCell.Selected = false;
    }
}
firstItemsDataGridView.Rows[0,-1].Selected = true;
不起作用,

firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
    firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
    item.Selected = false;

    foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
        itemCell.Selected = false;
    }
}
firstItemsDataGridView.Rows[0,-1].Selected = true;
不太管用

我已经将选择模式设置为全行选择,我不知道如何实现我的目标。
非常感谢

dataGridView1.ClearSelection();

应该有用。可能您有自动选择触发行的代码?

确保取消选择所有行(dataGridView.rows[…].Selected=false)


第0行默认为选中,因此在打开dataGridView时设置dataGridView.Rows[0].selected=false,并且只要其他选项设置为用户无法选择,那么您就不会选择任何内容,也不会保留任何内容。

因为没有答案,我在其他帖子中使用了这个答案,我遇到了同样的问题,第一行被选中,而取消选中是不可能的:

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}
这是一个小技巧,您可以看到行被选中的唯一方式是通过第一列(不是列[0],而是第一列)。单击另一行时,将不再看到蓝色选择,只有箭头指示选择了哪一行

解决方案:

我发现了为什么我的第一行被默认选中,以及如何在默认情况下不选择它


默认情况下,我的datagridview是windows窗体上第一个制表位的对象。首先在另一个对象上设置tab stop(可能完全禁用datagrid的tab stop将起作用)禁用选择第一行

在NullSkull的回答解决了我的问题,即datagridview控件第0行第0列的单元格始终在表单加载时被选中,尽管在窗体的构造函数方法中调用了ClearSelection,但无法取消选择。我只需要在Form_Load事件中调用ClearSelection。
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !

如果您正在使用WPF并希望维护MVVM设计模式,则可以将两个选定项绑定到同一属性,以便在选择其中一项时,将自动取消选择另一项

试试这样的

public class SingletonClass
{
    private static SingletonClass _Instance;
    public static SingletonClass Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new SingletonClass();
            return _Instance;
        }
    }   // End Property Instance

    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set { _SelectedItem = value; }
    } // End Selected Item
 }

<DataGrid Name="Datagrid1" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

<DataGrid Name="Datagrid2" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">
public类SingletonClass
{
私有静态单例类_实例;
公共静态单例类实例
{
得到
{
if(_Instance==null)
_实例=新的SingletonClass();
返回_实例;
}
}//结束属性实例
私有对象_SelectedItem;
公共对象SelectedItem
{
获取{return\u SelectedItem;}
设置{u SelectedItem=value;}
}//结束所选项目
}
*我只使用了一个单例类,因为这将在不同的实例中跨不同的视图工作,如果您的视图在同一个视图中,您可以使用常规类

请注意xmal上的IsAsync=True,如果您计划在不同的视图中使用单例类,没有它将无法工作。

只需使用:


dgvName.ClearSelection()

正如@Taw在顶部的子命令中所说的那样-“不要叫得太早了!”

在我看来,默认行为根本不起作用。我的案例-tabControl的tab中的datagrid,如果之前没有显示该选项卡,它就不起作用了

那个黑客就像一个魔咒:

AnyTabControl.SelectedTab = FirsTab;
gridModules.ClearSelection(); //placed at first tab
AnyTabControl.SelectedTab = SecondTab; //that tab i would like to show first

结果:第二个选项卡显示给用户,当用户单击第一个选项卡时,选择将不会出现。

我尝试了这个,它对我有效:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
for(int i=0;i
所需的网格是否为
firstItemsDataGridView
?您是否再次分配数据源?firstItemsDataGridView是一个网格,我需要在其中取消选择所有项目,我没有使用任何数据源(绑定)设置
CurrentCell=null
应该可以做到这一点,但是网格中显示的数据是如何提供/添加的?不要过早调用它!dataGridView1.ClearSelection();