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?

LK Yeung
quelle
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

Habib
quelle
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;
//....
Jizakh
quelle
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)
Overdrive77
quelle
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";
Mahmoud Gamal
quelle
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);
Defkon1
quelle
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".

Snorvarg
quelle
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)    
Anders
quelle
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"); 
    }
RC-AI
quelle
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);
leiser Ton
quelle
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);
F.joksch
quelle
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);
Mohammad Salmanian
quelle
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;
Sherif Hamdy
quelle
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; 
Rei Salazar
quelle
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";
Khan
quelle
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();
luchezco
quelle
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 });
Punkt net
quelle
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.

Rangeeeer
quelle
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