2012-04-08 6 views
118

zu Datagridview, wenn Zeile DataTableWie eine neue Zeile hinzuzufügen programmatisch

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

Wie wäre es DataGridView hinzufügen ??

+1

Sie die Daten hinzufügen können, tun von eine Datentabelle zu einer Datagridview, indem Sie einfach die Datenquelle der Gridview gleich der Datentabelle 'datagridview1.DataSource = yourDataTable' setzen –

Antwort

185

Sie tun können:

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

Eine andere Art und Weise:

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

+14

danke, wenn meine Datagridview keine Zeilen haben, wie kann ich Zeile hinzufügen? –

+2

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

+4

Sie können eine Spalte nicht wie folgt direkt über den Namen referenzieren: row.Cells ["Column2"]. Value = "XYZ"; ... Sie müssen zuerst den Index nachschlagen: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ"; – Tizz

29

So:

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

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

Oder Sie brauchen dort Werte einzeln verwenden, um die propery .Rows() einzustellen, wie folgt aus:

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

danke. wenn die Datagridview 30 Spalten haben, aber ich möchte nur den Wert zu Spalte2 und Spalte6 hinzufügen und den Rest null oder leer halten. Wie kann ich das machen?? –

+1

@DavidYeung, Sicher kannst du: 'dataGridView1.Rows [1] .Cells [0] .Value =" cell value "'; –

+1

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

18

eine neue Zeile in einem DGV Hinzufügen ohne Zeilen mit Add() wirft Selection Ereignis, bevor Sie Daten eingeben (oder Binden Sie ein Objekt in der Tag-Eigenschaft).

erstellen Klon Reihe von RowTemplate sicherer imho ist:

//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

Clone() -Methode gab eine Zeile zurück, aber keine Zellen. row.Cells.Count ist 0. –

+4

Markand: Rufen Sie DataGridViewRow.CreateCells auf, um Ihre Cells-Auflistung zu initialisieren. –

35

So:

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

Danke, das funktioniert wirklich gut, wenn Sie eine einfache einzelne Spalte DataGridView für einfache editierbare Listen von Text haben. –

6

Wenn das Gitter gegen eine DataSet/Tabelle gebunden ist es besser, zu verwenden, um eine Binding wie

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

//Add data to dataTable and then call 

bindingSource.ResetBindings(false)  
2

Wenn Sie manipulieren müssen aß alles abgesehen von dem Zellwert Zeichenfolge wie einen Tag hinzufügen, versuchen Sie dies:

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); 
0

Ein Beispiel für Kopier Reihe von Datagridview und hat eine neue Zeile in der gleichen Datagridview: sagen

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

Lets Sie haben eine Datagridview, die nicht an ein Dataset gebunden ist und Sie programmgesteuert neue Zeilen füllen möchten ...

So geht's.

// 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) 
+1

+1: Dies ist die einzige Lösung, die tatsächlich verwendet die Spaltennamen wie von 'datagridview.Columns.Add (" columnname ")' definiert, benötigt keine DataTable und endet mit einem Lächeln – Roland

0

Betrachten Sie eine Windows-Anwendung und verwenden Sie Button Click Event, um diesen Code einzufügen.

dataGridView1.Rows 
       .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text }); 
0
//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; 
+0

Können Sie bitte erklären, wie es wäre Löse das Problem? – Phani

0

Wenn you've bereits eine DataSource definiert haben, können Sie die DataGridView des bekommen DataSource und als Datatable gegossen.

Fügen Sie dann einen neuen DataRow hinzu und legen Sie die Feldwerte fest.

Fügen Sie die neue Zeile zur DataTable hinzu und akzeptieren Sie die Änderungen.

In C# wäre es so etwas wie diese ..

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

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

dataTable.Rows.Add(drToAdd); 
dataTable.AcceptChanges(); 
0
//header 
dataGridView1.RowCount = 50; 
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0"; 


//add row by cell 
dataGridView1.Rows[1].Cells[0].Value = "cell value"; 
-1
string[] splited = t.Split('>'); 
int index = dgv_customers.Rows.Add(new DataGridViewRow()); 
dgv_customers.Rows[index].Cells["cust_id"].Value=splited.WhichIsType("id;"); 

aber darüber im Klaren sein, WhichIsType ist die Erweiterung Methode, die ich erstellt. Diese

+2

Wenn Sie eine Frage mit Code beantworten und dieser Code eine benutzerdefinierte Erweiterungsmethode erfordert, die Sie erstellt haben, und Sie den Code für die benutzerdefinierte Methode nicht eingegeben haben, ist dies keine besonders nützliche Antwort. – Bryan

+0

danke für den Tipp. Ich bin Sory wegen dem.aber diese methode ist nicht eine wichtige methode – rangeeeer

3

ist, wie ich eine Zeile hinzufügen, wenn die dgrview leer ist: (myDataGridView hat zwei Spalten in meinem Beispiel)

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

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

myDataGridView.Rows.Add(row); 

Nach docs: „CreateCells() löscht die vorhandenen Zellen und setzt ihre Vorlage nach zu der mitgelieferten DataGridView-Vorlage ".

+1

Danke das war sehr nützlich für mich, ich fehlte die "row.CreateCells (myDataGridView);" – Nuno

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

Sie auch eine neue Zeile erstellen und es dann so zu dem Datagridview hinzufügen:

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

hier ist ein weiterer Weg, um solche

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