none
DataTable bearbeiten, DataRow einfügen RRS feed

  • Frage

  • Hallo,

    ich bräuchte eine Hilfestellung bei folgenden Problem.

    Ich habe ein DataGridView, in welches ich eine DataTable lade.
    Das hinzufügen neuer DataRows erfolgt jedoch immer am Ende der DataTable.

    Nun möchte ich auch die Funktionalität, dass Hinzufügen auch innerhalb der Tabelle funktioniert.
    Sprich ich wähle im DataGridView eine Zeile und möchte dann unterhalb eine neue Zeile einfügen. Alle anderen Zeilen unterhalb müssen dann verschoben werden.

    Ich bräuchte ein paar Tipps wie ich das umsetze im Code.

    mfg  

    Freitag, 27. November 2015 14:19

Antworten

  • Hi,

    Davids Code fügt die neue Zeile nicht am Ende sondern an der aktuellen Position + 1 ein.

    Ich würde dir allerdings empfehlen, deine Datenquelle zu abzuändern, dass eine Positionsangabe enthalten ist. Dann musst Du nur einen neuen Eintrag in der Datenquelle erstellen, die Positionsangaben anpassen und die Sortierung deiner Datensätze entsprechend auf dieses Feld legen. Das geht auch über deine DataTable.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 27. November 2015 18:40
    Moderator

Alle Antworten

  • Hallo,

    ich hätte das wie folgt gelöst:

            DataTable dt;
            public int currentRow { get; set; }
            private void Form1_Load(object sender, EventArgs e)
            {
                dt = new DataTable();
    
                dt.Columns.Add("Vorname");
                dt.Columns.Add("Nachname");
    
                dt.Rows.Add("Michael", "Schulzte");
                dt.Rows.Add("Oskar", "Knecht");
                dt.Rows.Add("Luis", "Walter");
    
                BindingSource bs = new BindingSource(dt, "");
                dataGridView1.DataSource = bs;
            }
            private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
            {
                DataGridView.HitTestInfo hti;
                hti = dataGridView1.HitTest(e.X, e.Y);
    
                if (hti.RowIndex > -1 && hti.ColumnIndex > -1)
                {
                    dataGridView1.CurrentCell = dataGridView1.Rows[hti.RowIndex].Cells[0];
                    currentRow = hti.RowIndex;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            { 
                var newRow = dt.NewRow();
                newRow["Vorname"] = string.Empty;
                newRow["Nachname"] = string.Empty;
                dt.Rows.InsertAt(newRow, currentRow + 1);
            }
    Sobald der User in das DataGridView reinklickt, wird die aktuelle Zeile gespeichert. Sobald man auf den Button1 klickt, wird eine neue DataRow an die Stelle currentRow+1 eingetragen.



    Freitag, 27. November 2015 14:43
  • Hallo,

    danke für die Hilfestellung :)

    mfg


    • Bearbeitet magkro Freitag, 27. November 2015 18:45
    Freitag, 27. November 2015 18:26
  • Hi,

    Davids Code fügt die neue Zeile nicht am Ende sondern an der aktuellen Position + 1 ein.

    Ich würde dir allerdings empfehlen, deine Datenquelle zu abzuändern, dass eine Positionsangabe enthalten ist. Dann musst Du nur einen neuen Eintrag in der Datenquelle erstellen, die Positionsangaben anpassen und die Sortierung deiner Datensätze entsprechend auf dieses Feld legen. Das geht auch über deine DataTable.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 27. November 2015 18:40
    Moderator
  • Hallo magkro,

    bist Du weitergekommen?

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 30. November 2015 09:47