Announcement

Collapse
No announcement yet.

sortiertes DataGridView editieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • sortiertes DataGridView editieren

    Hallo,
    ich habe eine Access Tabelle (tGrunddaten) über eine Datenquelle (DataAdapter tGrunddatenTableAdapter, DataSet tGrunddatenDataSet ... ) und einen DataGridView (tGrunddatenDataGridView) in mein Programm eingebunden. Ich möchte nun einen Eintrag im DataGridView mit Maus und über Programmcode editieren. Dazu wähle ich im unsortierten tGrunddatenDataGridView mit der Maus eine beliebige Reihe (Row) und ändere z.B. den Eintrag in einer Zelle wie folgt:

    int aenderungsindex = tGrunddatenDataGridView.CurrentRow.Index;
    tGrunddatenDataSet.[aenderungsindex].Nachname="testnachname";

    Das klappt prima. Wenn nun jedoch die Tabelle beliebig sortiert wird und ich in der sortierten Tabelle mittels Programmcode eine Änderung durchführen will, kann ich zwar mit der Maus im Gitter eine Reihe anwählen, aber der dann ausgelesene Index (int aenderungsindex = tGrunddatenDataGridView.CurrentRow.Index) des tGrunddatenDataGridView ist ein anderer als ich für das DataSet benötige. Frage: Wie ermittele ich den "wahren" Index für mein DataSet, wenn ich in einem sortieten DataGridView eine Reihe anklicke?
    Viele Dank

  • #2
    Hallo,

    am einfachsten führt der Weg über die BindingSource-Eigenschaft Current (liefert den aktuell ausgewählten Datensatz als DataRowView-Instanz zurück) zum Ziel. Ansonsten zeigt das folgende Beispiel, wie man die Sortierung mit berücksichtigt:

    Code:
            private DataSet aDS = new DataSet();
            private DataView aDV = new DataView();
    
     
            private void Form1_Load(object sender, System.EventArgs e)
            {
                //neue DataTable erzeugen
                DataTable aNewDataTable = new DataTable();
                aNewDataTable.Columns.Add("id", typeof(Int32));
                aNewDataTable.Columns.Add("Nachname", typeof(String));
                aNewDataTable.Columns.Add("Vorname", typeof(String));
                // Primärschlüssel
                aNewDataTable.PrimaryKey = new DataColumn[] {aNewDataTable.Columns[0]};
                aNewDataTable.MinimumCapacity = 10;
                // Datensätze eintragen 
                aNewDataTable.Rows.Add(new Object[] {1, "Kosch", "Andreas"});
                aNewDataTable.Rows.Add(new Object[] {2, "Mustermann", "Manfred"});
                aNewDataTable.Rows.Add(new Object[] {3, "Ritz", "Bernd"});
                aDS.Tables.Add(aNewDataTable);
                // Ergebnis anzeigen
                dataGridBad.DataSource = aDS.Tables[0];
                aDV.Table = aDS.Tables[0];
                dataGrid1.DataSource = aDV;
                dataGridView1.DataSource = aDS.Tables[0];
            }
    
    
            private void buttonBad_Click(object sender, EventArgs e)
            {
                if (checkBox1.Checked)
                {
                    // Die Index-Positionen stimmen nicht überein!
                    textBox3.Text = aDS.Tables[0].Rows[dataGridBad.CurrentRowIndex][0].ToString();
                    textBox4.Text = aDS.Tables[0].Rows[dataGridBad.CurrentRowIndex][1].ToString();
                }
                else
                {   
                    // Plan B funkioniert auch nicht!
                    CurrencyManager aCM = (CurrencyManager)this.BindingContext[dataGridBad.DataSource];
                    textBox3.Text = ((DataTable)dataGridBad.DataSource).Rows[aCM.Position][0].ToString();
                    textBox4.Text = ((DataTable)dataGridBad.DataSource).Rows[aCM.Position][1].ToString();
                }
                dataGridBad.CaptionText = aDS.Tables[0].DefaultView.Sort;
            }
     
            private void button1_Click(object sender, System.EventArgs e)
            {
                // Der Weg über das DataView führt zum Ziel!
                textBox1.Text = aDV[dataGrid1.CurrentRowIndex][0].ToString();
                textBox2.Text = aDV[dataGrid1.CurrentRowIndex][1].ToString();
                dataGrid1.CaptionText = aDV.Sort;
            }
    
     
            private void button2_Click(object sender, EventArgs e)
            {        
                textBox5.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                textBox6.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
            }

    Comment


    • #3
      Danke schön

      Herr Kosch,
      vielen Dank für Ihre Hilfe !
      M.f.G.
      Bartoldus

      Comment

      Working...
      X