取消选择datagridview中的所有行

时间:2011-09-06 21:08:22

标签: c# winforms datagridview selection rows

我有两个datagridviews,当我点击其中一个时,我想在第二个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;

也不行。

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

9 个答案:

答案 0 :(得分:53)

dataGridView1.ClearSelection();

应该有效。也许你有自动选择触发行的代码?

答案 1 :(得分:4)

由于没有答案,我在其他帖子中使用了这个答案,我遇到了第一行被选中的相同问题,并且无法取消选择:

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窗体上第一个制表位的对象。使标签首先停在另一个对象上(可能会禁用数据网格的tabstop)将禁用选择第一行

答案 2 :(得分:3)

NullSkull的答案解决了我的问题,即数据网格视图控件的第0行第0列的单元格始终在表单加载时被选中,尽管在表单的构造函数方法中调用了ClearSelection,但无法取消选择。我只需要在Form_Load事件中调用ClearSelection。 http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-when-the-form-i-loaded-in-datagridview-in-windows-application.aspx

答案 3 :(得分:1)

只需使用:

dgvName.ClearSelection();

答案 4 :(得分:0)

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

行零默认为选中,因此在打开DataGridView时设置dataGridView.Rows [0] .Selected = false,只要设置了其他选项以便用户无法选择,那么您将拥有并维护,没有选择。

答案 5 :(得分:0)

// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !

答案 6 :(得分:0)

如果您使用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}">

*我只使用单例类,因为它可以在不同的实例中使用不同的视图,如果你在同一视图中,可以使用常规类。

请注意xmal上的 IsAsync = True ,如果你打算在不同的视图中使用单例类,没有它就无法使用它。

答案 7 :(得分:0)

我尝试了这个,它为我工作:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}

答案 8 :(得分:-1)

正如@Taw在子评论中所说的那样 - &#34;不要过早称呼它!&#34;

在我的情况下,默认行为根本不起作用。我的情况 - tabControl选项卡中的 datagrid ,如果之前未显示该选项卡,则无效!

那个黑客就像一个魅力:

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

结果:第二个标签显示给用户,当他点击第一个选项时 - 不会出现。