webentwicklung-frage-antwort-db.com.de

Heben Sie die Auswahl aller Zeilen in datagridview auf

Ich habe zwei Datagrid-Ansichten, und wenn ich auf einen von ihnen klicke, möchte ich die Auswahl im zweiten Datagridview aufheben.

firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;

funktioniert nicht,

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;
    }
}

funktioniert nicht,

firstItemsDataGridView.Rows[0,-1].Selected = true;

funktioniert auch nicht.

Ich habe den Auswahlmodus auf vollständige Zeilenauswahl gesetzt und weiß nicht, wie ich mein Ziel erreichen soll.
Danke vielmals!

20
Martin Ch
dataGridView1.ClearSelection();

Sollte arbeiten. Vielleicht haben Sie Code, der automatisch Zeilen auswählt, die ausgelöst werden?

52
Mitzi

Da es keine Antwort gibt und ich diese Antwort in anderen Beiträgen verwendet habe, stieß ich auf die gleiche Frage, dass die erste Reihe ausgewählt wurde und die Abwahl nicht möglich war:

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;
    }
}

Dies ist ein kleiner Trick. Die einzige Möglichkeit, wie Sie sehen, dass eine Zeile ausgewählt wird, ist die allererste Spalte (nicht Spalte [0], sondern die Spalte). Wenn Sie auf eine andere Zeile klicken, wird die blaue Auswahl nicht mehr angezeigt. Nur der Pfeil zeigt an, welche Zeile ausgewählt wurde.

LÖSUNG:

ich habe herausgefunden, warum meine erste Reihe standardmäßig ausgewählt wurde, und fand heraus, wie sie nicht standardmäßig ausgewählt wird.

Standardmäßig war mein Datagridview das Objekt mit dem ersten Tabstopp in meinem Windows-Formular. Wenn Sie die Tabulatorstütze zuerst für ein anderes Objekt anhalten (möglicherweise funktioniert Tabstop für das Datagrid überhaupt nicht), wurde die Auswahl der ersten Zeile deaktiviert

4
Mario

Eine Antwort bei NullSkull löste das Problem für mich, dass die Zelle in Zeile 0, Spalte 0 für das DataGridView-Steuerelement beim Laden des Formulars immer ausgewählt wurde und nicht abgewählt werden konnte, obwohl ClearSelection innerhalb der Konstruktormethode des Formulars aufgerufen wurde. Ich musste nur ClearSelection im Form_Load-Ereignis anrufen . http://www.nullskull.com/q/10066166/how-to-deselect-the-first-ow-hen-hen-the-form-i- in-datagridview-in-windows-application.aspx geladen

3
voidmain

Benutz einfach: 

dgvName.ClearSelection ();

1
Ahmed Elzeiny

Stellen Sie sicher, dass alle Zeilen deaktiviert sind (dataGridView.Rows [...]. Selected = false).

Der Standardwert für die Zeile Null ist ausgewählt. Setzen Sie dataGridView.Rows [0] .Selected = false, wenn Sie DataGridView öffnen. Solange die anderen Optionen festgelegt sind, sodass der Benutzer keine Auswahl treffen kann, haben Sie nichts ausgewählt.

0
Klinkenbecker

Wenn Sie WPF verwenden und ein MVVM-Entwurfsmuster beibehalten möchten, können Sie beide ausgewählten Elemente an dieselbe Eigenschaft binden. Wenn Sie eines auswählen, wird das andere automatisch deaktiviert.

versuche so etwas

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}">

* Ich habe nur eine Singleton-Klasse verwendet, da dies für verschiedene Ansichten in verschiedenen Instanzen funktioniert. Sie können eine reguläre Klasse verwenden, wenn Sie sich in derselben Ansicht befinden.

Bitte beachten Sie das IsAsync = True auf dem xmal. Wenn Sie planen, eine Singleton-Klasse in verschiedenen Ansichten zu verwenden, funktioniert sie nicht ohne.

0
Bruno Khoury

Ich habe es versucht und es funktioniert für mich:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
0
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
0
AbuDawood