Come aggiungere una nuova riga a datagridview a livello di codice


157

se aggiungi riga a DataTable

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

Che ne dici di DataGridView??


2
È possibile aggiungere i dati di un datatable a una datagridview semplicemente impostando l'origine dati di gridview uguale a quella databiledatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Risposte:


249

Tu puoi fare:

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

o:

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

Un altro modo:

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

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


28
grazie, se il mio datagridview non ha righe, come posso aggiungere una riga?
LK Yeung,

3
@DavidYeung bene in tal caso la risposta di MGA può aiutarti, qual è la tua fonte di dati? è un datatable? in tal caso è possibile aggiungere la riga al datatable e quindi aggiornare l'origine dati
Habib

7
Non puoi fare direttamente riferimento a una colonna per nome come hai fatto: row.Cells ["Column2"]. Value = "XYZ"; ... Devi prima cercare l'indice: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
Tizz,

2
Idealmente, dovresti clonare RowTemplateil file DataGridView. Questo diventa più un problema quando si hanno stili diversi su diverse righe nel file DataGridView.
Anthony,

7
Dopo aver letto circa 20 soluzioni (trovate da google) questa è la prima che capisco.
C4d,

50

Come questo:

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

Grazie, funziona davvero bene se hai una semplice DataGridView a colonna singola per semplici elenchi di testo modificabili.
Bob Moss,

Funziona benissimo nel caso in cui non si abbia
un'origine

Le righe non possono essere aggiunte a livello di codice alla raccolta di righe del DataGridView quando il controllo è associato ai dati.
Darth Sucuk,

39

Diciamo che hai una datagridview che non è legata a un set di dati e vuoi popolare a livello di codice nuove righe ...

Ecco come lo fai.

// 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: Questa è l'unica soluzione che utilizza effettivamente i nomi delle colonne come definito da datagridview.Columns.Add("columnname"), non ha bisogno di una DataTable e termina con un sorriso
Roland,

32

Come questo:

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

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

Oppure devi impostare lì i valori che usano individualmente il proprio .Rows(), in questo modo:

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

1
grazie. se la datagridview ha 30 colonne, ma voglio solo aggiungere il valore a column2 e column6 e il resto rimane nullo o vuoto. come posso fare questo??
LK Yeung,

1
@DavidYeung, Certo che si può: dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal,

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

int AddedRowIndex = dataGridViewRows.Add (); var AddedRow = dataGridViewRows [AddedRowIndex]; ora tutti i valori sono riempiti con il valore predefinito, devi solo cambiare le celle che non sono predefinite: AddedRow.Cells [column2.Index] .Value = myValue; (supponendo che column2 sia un DataGridViewColumn)
Harald Coppoolse

24

L'aggiunta di una nuova riga in un DGV senza righe con Add () genera l' evento SelectionChanged prima di poter inserire dati (o associare un oggetto nella proprietà Tag).

Creare una riga clone da RowTemplate è più sicuro imho:

//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
Il metodo Clone () ha restituito una riga ma senza celle. row.Cells.Count è 0.
MARKAND Bhatt

5
Markand: chiama DataGridViewRow.CreateCells per inizializzare la tua raccolta Cells.
tono silenzioso

Le righe non possono essere aggiunte a livello di codice alla raccolta di righe del DataGridView quando il controllo è associato ai dati.
Darth Sucuk,

10

È così che aggiungo una riga se dgrview è vuoto: (myDataGridView ha due colonne nel mio esempio)

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

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

myDataGridView.Rows.Add(row);

Secondo i documenti: "CreateCells () cancella le celle esistenti e imposta il loro modello in base al modello DataGridView fornito".


2
Grazie, mi è stato molto utile, mi mancava il "row.CreateCells (myDataGridView);"
f4d0,

Le righe non possono essere aggiunte a livello di codice alla raccolta di righe del DataGridView quando il controllo è associato ai dati.
Darth Sucuk,

8

Se la griglia è associata a un DataSet / table è meglio usare un BindingSource come

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

ecco un altro modo per farlo

 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

Se hai bisogno di manipolare qualsiasi cosa a parte la stringa del valore della cella come l'aggiunta di un tag, prova questo:

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

puoi anche creare una nuova riga e quindi aggiungerla a DataGridView in questo modo:

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

2

Se stai vincolando un elenco

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

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

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

Se si sta vincolando DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

Un esempio di riga di copia da dataGridView e aggiunta una nuova riga in Lo stesso 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; 

Puoi spiegare come risolverebbe il problema?
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

Se hai già definito un DataSource, puoi ottenere gli DataGridView´ DataSourcee lanciarlo come a Datatable.

Quindi aggiungere un nuovo DataRowe impostare i valori dei campi.

Aggiungi la nuova riga al DataTablee accetta le modifiche.

In C # sarebbe qualcosa del genere ..

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

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

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

0

Prendi in considerazione un'applicazione Windows e utilizzando Button Click Event inserisci questo codice.

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

Ma attenzione, WhichIsTypeè il metodo di estensione che ho creato.


2
Quando rispondi a una domanda con un codice e quel codice richiede un metodo di estensione personalizzato che hai creato e non hai incluso il codice per il metodo personalizzato, non è una risposta terribilmente utile.
Bryan,

grazie per il consiglio. sono sory perché. ma quel metodo non è un metodo importante
rangeeeer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.