Comment ajouter une nouvelle ligne à datagridview par programmation


157

si ajouter une ligne à DataTable

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

Que diriez-vous DataGridView??


2
Vous pouvez ajouter les données d'un datatable à un datagridview simplement en définissant la source de données du gridview égale à la datatabledatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Réponses:


249

Tu peux faire:

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

ou:

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

Autrement:

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

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


28
merci, si mon datagridview n'a pas de lignes, comment puis-je ajouter une ligne?
LK Yeung

3
@DavidYeung bien dans ce cas, la réponse de MGA peut vous aider, quelle est votre source de données? est-ce un datatable? si tel est le cas, vous pouvez ajouter la ligne à la table de données, puis actualiser la source de données
Habib

7
Vous ne pouvez pas référencer directement une colonne par son nom comme vous l'avez fait: row.Cells ["Column2"]. Value = "XYZ"; ... Vous devez d'abord rechercher l'index: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
Tizz

2
Idéalement, vous devriez cloner RowTemplatele DataGridView. Cela devient plus un problème lorsque vous avez différents styles sur différentes lignes dans le DataGridView.
Anthony du

7
Après avoir lu environ 20 solutions (trouvées par google), c'est la première que je comprends.
C4d

50

Comme ça:

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

Merci, cela fonctionne très bien si vous avez un DataGridView à une seule colonne pour de simples listes de texte modifiables.
Bob Moss

Cela fonctionne très bien dans le cas où vous n'avez pas de source de données affectée à la vue grille
Jhabar

Les lignes ne peuvent pas être ajoutées par programme à la collection de lignes de DataGridView lorsque le contrôle est lié aux données.
Darth Sucuk

39

Disons que vous avez une vue de données qui n'est pas liée à un ensemble de données et que vous souhaitez remplir de nouvelles lignes par programmation ...

Voici comment procéder.

// 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: C'est la seule solution qui utilise réellement les noms de colonnes tels que définis par datagridview.Columns.Add("columnname"), n'a pas besoin de DataTable et se termine par un sourire
Roland

32

Comme ça:

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

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

Ou vous devez définir les valeurs individuellement, utilisez la propriété .Rows(), comme ceci:

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

1
Merci. si le datagridview a 30 colonnes, mais je veux juste ajouter la valeur à column2 et column6 et le reste reste nul ou vide. Comment puis-je faire ceci??
LK Yeung

1
@DavidYeung, Bien sûr , vous pouvez: 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]; maintenant toutes les valeurs sont remplies avec la valeur par défaut, il vous suffit de changer les cellules qui ne sont pas par défaut: addedRow.Cells [column2.Index] .Value = myValue; (en supposant que column2 est un DataGridViewColumn)
Harald Coppoolse

24

L'ajout d'une nouvelle ligne dans un DGV sans lignes avec Add () déclenche l' événement SelectionChanged avant de pouvoir insérer des données (ou lier un objet dans la propriété Tag).

Créer une ligne de clone à partir de RowTemplate est plus sûr à mon humble avis:

//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
La méthode Clone () a renvoyé une ligne mais sans Cells. row.Cells.Count is 0.
MARKAND Bhatt

5
Markand: appelez DataGridViewRow.CreateCells pour initialiser votre collection Cells.
ton silencieux le

Les lignes ne peuvent pas être ajoutées par programme à la collection de lignes de DataGridView lorsque le contrôle est lié aux données.
Darth Sucuk

10

Voici comment j'ajoute une ligne si le dgrview est vide: (myDataGridView a deux colonnes dans mon exemple)

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

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

myDataGridView.Rows.Add(row);

Selon la documentation: «CreateCells () efface les cellules existantes et définit leur modèle en fonction du modèle DataGridView fourni».


2
Merci, cela a été très utile pour moi, il me manquait le "row.CreateCells (myDataGridView);"
f4d0

Les lignes ne peuvent pas être ajoutées par programme à la collection de lignes de DataGridView lorsque le contrôle est lié aux données.
Darth Sucuk

8

Si la grille est liée à un DataSet / table, il est préférable d'utiliser un BindingSource comme

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

voici une autre façon de faire

 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

Si vous avez besoin de manipuler autre chose que la chaîne de valeur de cellule, comme l'ajout d'une balise, essayez ceci:

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

vous pouvez également créer une nouvelle ligne, puis l'ajouter au DataGridView comme ceci:

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

2

Si vous liez une liste

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

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

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

Si vous liez DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

Un exemple de copie de ligne de dataGridView et ajout d'une nouvelle ligne dans le même 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; 

Pouvez-vous expliquer comment cela résoudrait le problème?
Phani le

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

Si vous avez déjà défini a DataSource, vous pouvez obtenir les DataGridView´s DataSourceet les convertir en a Datatable.

Ajoutez ensuite un nouveau DataRowet définissez les valeurs des champs.

Ajoutez la nouvelle ligne à DataTableet acceptez les modifications.

En C #, ce serait quelque chose comme ça.

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

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

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

0

Considérez une application Windows et en utilisant l'événement de clic de bouton, mettez ce code dedans.

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

Mais sachez que WhichIsTypec'est la méthode d'extension que j'ai créée.


2
Lorsque vous répondez à une question avec du code et que ce code nécessite une méthode d'extension personnalisée que vous avez créée et que vous n'avez pas inclus le code de la méthode personnalisée, ce n'est pas une réponse très utile.
Bryan

Merci pour le conseil. je suis sory à cause de cela. mais cette méthode n'est pas une méthode importante
rangeeeer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.