So fügen Sie der Datagrid-Ansicht programmgesteuert eine neue Zeile hinzu


157

wenn Zeile hinzufügen zu DataTable

DataRow row = datatable1.NewRow();
row["column2"]="column2";
row["column6"]="column6";
datatable1.Rows.Add(row);

Wie wäre es DataGridView?


2
Sie können die Daten einer Datentabelle zu einer Datagrid-Ansicht hinzufügen, indem Sie die Datenquelle der Rasteransicht gleich der Datentabelle setzendatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Antworten:


248

Du kannst tun:

DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
yourDataGridView.Rows.Add(row);

oder:

DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells["Column2"].Value = "XYZ";
row.Cells["Column6"].Value = 50.2;
yourDataGridView.Rows.Add(row);

Ein anderer Weg:

this.dataGridView1.Rows.Add("five", "six", "seven","eight");
this.dataGridView1.Rows.Insert(0, "one", "two", "three", "four");

Von: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rows.aspx


28
danke, wenn meine datagridview keine zeilen hat, wie kann ich zeilen hinzufügen?
LK Yeung

3
@ DavidYeung gut in diesem Fall Antwort von MGA kann Ihnen helfen, was ist Ihre Datenquelle? ist es eine datierbare? Wenn ja, können Sie die Zeile zur Datentabelle hinzufügen und dann die Datenquelle aktualisieren
Habib

7
Sie können eine Spalte nicht direkt nach Namen referenzieren, wie Sie es getan haben: row.Cells ["Column2"]. Value = "XYZ"; ... Sie müssen zuerst den Index nachschlagen: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
Tizz

2
Idealerweise sollten Sie das Klonen RowTemplatevon der DataGridView. Dies wird zu einem größeren Problem, wenn Sie unterschiedliche Stile in verschiedenen Zeilen in der haben DataGridView.
Anthony

7
Nachdem ich ungefähr 20 Lösungen gelesen habe (von Google gefunden), ist dies die erste, die ich verstehe.
C4d

49

So was:

var index = dgv.Rows.Add();
dgv.Rows[index].Cells["Column1"].Value = "Column1";
dgv.Rows[index].Cells["Column2"].Value = 5.6;
//....

Vielen Dank, dies funktioniert sehr gut, wenn Sie eine einfache einspaltige DataGridView für einfache bearbeitbare Textlisten haben.
Bob Moss

Es funktioniert hervorragend, wenn Sie keine Datenquelle für die Rasteransicht zugewiesen haben
Jhabar

Zeilen können nicht programmgesteuert zur Zeilensammlung von DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist.
Darth Sucuk

39

Nehmen wir an, Sie haben eine Datagrid-Ansicht, die nicht an ein Dataset gebunden ist, und Sie möchten programmgesteuert neue Zeilen füllen ...

So machen Sie es.

// Create a new row first as it will include the columns you've created at design-time.

int rowId = dataGridView1.Rows.Add();

// Grab the new row!
DataGridViewRow row = dataGridView1.Rows[rowId];

// Add the data
row.Cells["Column1"].Value = "Value1";
row.Cells["Column2"].Value = "Value2";

// And that's it! Quick and painless... :o)

3
+1: Dies ist die einzige Lösung, die tatsächlich die durch definierten Spaltennamen verwendet datagridview.Columns.Add("columnname"), keine Datentabelle benötigt und mit einem Lächeln endet
Roland

32

So was:

 dataGridView1.Columns[0].Name = "column2";
 dataGridView1.Columns[1].Name = "column6";

 string[] row1 = new string[] { "column2 value", "column6 value" };
 dataGridView1.Rows.Add(row1);

Oder Sie müssen dort Werte festlegen .Rows(), indem Sie die Eigenschaft wie folgt verwenden :

 dataGridView1.Rows[1].Cells[0].Value = "cell value";

1
Danke. Wenn die Datagrid-Ansicht 30 Spalten hat, ich aber nur den Wert zu Spalte2 und Spalte6 hinzufügen möchte und der Rest null oder leer bleibt. Wie kann ich das machen??
LK Yeung

1
@ DavidYeung, Sicher können Sie : dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal

1
dataGridView.Rows.Add (null, 2, null, null, null, 6);
MrFox

int addiertRowIndex = dataGridViewRows.Add (); var addierteRow = dataGridViewRows [addierteRowIndex]; Jetzt werden alle Werte mit dem Standardwert gefüllt. Sie müssen nur noch die Zellen ändern, die nicht der Standardwert sind :addedRow.Cells [column2.Index] .Value = myValue; (Angenommen, Spalte2 ist eine DataGridViewColumn)
Harald Coppoolse

24

Das Hinzufügen einer neuen Zeile in einem DGV ohne Zeilen mit Add () löst das SelectionChanged- Ereignis aus, bevor Sie Daten einfügen (oder ein Objekt in die Tag-Eigenschaft binden) können.

Das Erstellen einer Klonzeile aus RowTemplate ist imho sicherer:

//assuming that you created columns (via code or designer) in myDGV
DataGridViewRow row = (DataGridViewRow) myDGV.RowTemplate.Clone();
row.CreateCells(myDGV, "cell1", "cell2", "cell3");

myDGV.Rows.Add(row);

3
Die Clone () -Methode hat eine Zeile ohne Zellen zurückgegeben. row.Cells.Count ist 0.
MARKAND Bhatt

5
Markand: Rufen Sie DataGridViewRow.CreateCells auf, um Ihre Cells-Sammlung zu initialisieren.
stiller Ton

Zeilen können nicht programmgesteuert zur Zeilensammlung von DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist.
Darth Sucuk

10

So füge ich eine Zeile hinzu, wenn die dgrview leer ist: (myDataGridView hat in meinem Beispiel zwei Spalten)

DataGridViewRow row = new DataGridViewRow();
row.CreateCells(myDataGridView);

row.Cells[0].Value = "some value";
row.Cells[1].Value = "next columns value";

myDataGridView.Rows.Add(row);

Laut docs: "CreateCells () löscht die vorhandenen Zellen und legt ihre Vorlage gemäß der mitgelieferten DataGridView-Vorlage fest".


2
Danke, das war sehr nützlich für mich. Mir fehlte die "row.CreateCells (myDataGridView)".
f4d0

Zeilen können nicht programmgesteuert zur Zeilensammlung von DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist.
Darth Sucuk

8

Wenn das Raster an ein DataSet / eine Tabelle gebunden ist, ist es besser, eine BindingSource wie zu verwenden

var bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
grid.DataSource = bindingSource;

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

Hier ist ein anderer Weg, dies zu tun

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.ColumnCount = 3;

        dataGridView1.Columns[0].Name = "Name";
        dataGridView1.Columns[1].Name = "Age";
        dataGridView1.Columns[2].Name = "City";

        dataGridView1.Rows.Add("kathir", "25", "salem");
        dataGridView1.Rows.Add("vino", "24", "attur");
        dataGridView1.Rows.Add("maruthi", "26", "dharmapuri");
        dataGridView1.Rows.Add("arun", "27", "chennai"); 
    }

4

Wenn Sie etwas anderes als die Zeichenfolge "Zellenwert" bearbeiten müssen, z. B. ein Tag hinzufügen, versuchen Sie Folgendes:

DataGridViewRow newRow = (DataGridViewRow)mappingDataGridView.RowTemplate.Clone();
newRow.CreateCells(mappingDataGridView);

newRow.Cells[0].Value = mapping.Key;
newRow.Cells[1].Value = ((BusinessObject)mapping.Value).Name;
newRow.Cells[1].Tag = mapping.Value;

mappingDataGridView.Rows.Add(newRow);

3
yourDGV.Rows.Add(column1,column2...columnx); //add a row to a dataGridview
yourDGV.Rows[rowindex].Cells[Cell/Columnindex].value = yourvalue; //edit the value

Sie können auch eine neue Zeile erstellen und diese dann wie folgt zur DataGridView hinzufügen:

DataGridViewRow row = new DataGridViewRow();
row.Cells[Cell/Columnindex].Value = yourvalue;
yourDGV.Rows.Add(row);

2

Wenn Sie eine Liste binden

List<Student> student = new List<Student>();

dataGridView1.DataSource = student.ToList();
student .Add(new Student());

//Reset the Datasource
dataGridView1.DataSource = null;
dataGridView1.DataSource = student;

Wenn Sie DataTable binden

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

// Add the row to the rows collection.
table.Rows.Add(newRow);

1

Ein Beispiel für das Kopieren einer Zeile aus dataGridView und das Hinzufügen einer neuen Zeile in derselben dataGridView:

DataTable Dt = new DataTable();
Dt.Columns.Add("Column1");
Dt.Columns.Add("Column2");

DataRow dr = Dt.NewRow();
DataGridViewRow dgvR = (DataGridViewRow)dataGridView1.CurrentRow;
dr[0] = dgvR.Cells[0].Value; 
dr[1] = dgvR.Cells[1].Value;              

Dt.Rows.Add(dR);
dataGridView1.DataSource = Dt;

1
//Add a list of BBDD
var item = myEntities.getList().ToList();
//Insert a new object of type in a position of the list       
item.Insert(0,(new Model.getList_Result { id = 0, name = "Coca Cola" }));

//List assigned to DataGridView
dgList.DataSource = item; 

Können Sie bitte erklären, wie das Problem behoben werden kann?
Phani

1
//header
dataGridView1.RowCount = 50;
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0";


//add row by cell 
 dataGridView1.Rows[1].Cells[0].Value = "cell value";

1

Wenn Sie bereits a definiert haben DataSource, können Sie die DataGridView´s erhalten DataSourceund als a wirken Datatable.

Fügen Sie dann eine neue hinzu DataRowund legen Sie die Feldwerte fest.

Fügen Sie die neue Zeile hinzu DataTableund akzeptieren Sie die Änderungen.

In C # wäre es so etwas ..

DataTable dataTable = (DataTable)dataGridView.DataSource;
DataRow drToAdd = dataTable.NewRow();

drToAdd["Field1"] = "Value1";
drToAdd["Field2"] = "Value2";

dataTable.Rows.Add(drToAdd);
dataTable.AcceptChanges();

0

Stellen Sie sich eine Windows-Anwendung vor und fügen Sie diesen Code mithilfe von Button Click Event ein.

dataGridView1.Rows
                .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text });

0
string[] splited = t.Split('>');
int index = dgv_customers.Rows.Add(new DataGridViewRow());
dgv_customers.Rows[index].Cells["cust_id"].Value=splited.WhichIsType("id;");

Aber sei dir bewusst, WhichIsTypeist die Erweiterungsmethode, die ich erstellt habe.


2
Wenn Sie eine Frage mit einem Code beantworten und für diesen Code eine von Ihnen erstellte benutzerdefinierte Erweiterungsmethode erforderlich ist und Sie den Code für die benutzerdefinierte Methode nicht angegeben haben, ist dies keine besonders nützliche Antwort.
Bryan

Danke für den Tipp. Ich bin deshalb traurig. Aber diese Methode ist keine wichtige Methode
Rangeeeer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.