Datagridview'e programlı olarak yeni bir satır ekleme


157

satır eklerseniz DataTable

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

Ne dersin DataGridView??


2
Sadece tablo görüntüsünün veri kaynağını veri tablosuna eşit olarak ayarlayarak veri tablosunun verilerini bir veri ızgarasına ekleyebilirsinizdatagridview1.DataSource = yourDataTable
— Jonathan Van Dam

Yanıtlar:


249

Yapabilirsin:

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

veya:

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

Diğer yol:

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

Gönderen: http://msdn.microsoft.com/tr-tr/library/system.windows.forms.datagridview.rows.aspx


28
teşekkür ederim, datagridview satırım yoksa nasıl satır ekleyebilirim?
— LK Yeung

3
Bu durumda MGA'dan gelen cevap size yardımcı olabilir, veri kaynağınız nedir? datatable mı? öyleyse satırı veri tablosuna ekleyebilir ve daha sonra veri kaynağını yenileyebilirsiniz
— Habib

7
Bir sütuna, yaptığınız gibi doğrudan ada göre başvuramazsınız: row.Cells ["Column2"]. Value = "XYZ"; ... Önce dizini aramanız gerekir: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
— Tizz,

2
İdeali, klonlamak gerektiğini RowTemplatearasında DataGridView. Bu, içindeki farklı satırlarda farklı stillere sahip olduğunuzda daha fazla sorun olur DataGridView.
— Anthony

7
(Google tarafından bulunan) yaklaşık 20 çözümü okuduktan sonra anladığım ilk çözüm bu.
— C4d

50

Bunun gibi:

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

Teşekkürler, basit düzenlenebilir metin listeleri için basit bir tek sütun DataGridView varsa bu gerçekten iyi çalışıyor.
— Bob Moss

Izgara görünümüne atanmış bir veri kaynağınız yoksa, harika çalışıyor
— Jhabar

Denetim, veriye bağlı olduğunda, satırlar programlı olarak DataGridView'ın satır koleksiyonuna eklenemez.
— Darth Sucuk

39

Bir veri kümesine bağlı olmayan bir veri ızgarası görünümünüz olduğunu ve programlı olarak yeni satırları doldurmak istediğinizi varsayalım ...

İşte böyle yapıyorsun.

// 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: Bu, aslında tanımlandığı gibi sütun adlarını kullanan, datagridview.Columns.Add("columnname")DataTable'a ihtiyaç duymayan ve bir gülümseme ile biten tek çözümdür
— Roland

32

Bunun gibi:

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

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

Ya da değerleri aşağıdaki gibi ayrı ayrı kullanmanız gerekir .Rows():

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

1
teşekkür ederim. datagridview 30 sütun var, ama ben sadece sütun2 ve column6 için değer eklemek istiyorum ve geri kalanı null veya boş tutmak istiyorum. bunu nasıl yapabilirim??
— LK Yeung

1
@DavidYeung, Elbette şunları yapabilirsiniz 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]; şimdi tüm değerler varsayılan değerle doldurulur, yalnızca varsayılan olmayan hücreleri değiştirmeniz gerekir: addedRow.Cells [column2.Index] .Value = myValue; (sütun 2'nin bir DataGridViewColumn olduğunu varsayarsak)
— Harald

24

Add () içeren satır içermeyen bir DGV'ye yeni bir satır eklemek, herhangi bir veri eklemeden (veya Tag özelliğinde bir nesneyi bağlamadan önce ) SelectionChanged olayını yükseltir .

RowTemplate'ten bir klon satırı oluşturmak daha güvenli 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
Clone () yöntemi bir satır döndürdü ancak Hücreler olmadan. Satır Hücreleri 0'dır.
— MARKAND Bhatt

5
Markand: Hücreler koleksiyonunuzu başlatmak için DataGridViewRow.CreateCells'i arayın.
— sessiz ton

Denetim, veriye bağlı olduğunda, satırlar programlı olarak DataGridView'ın satır koleksiyonuna eklenemez.
— Darth Sucuk

10

Dgrview boşsa nasıl bir satır eklerim: (myDataGridView benim örnekte iki sütun var)

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

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

myDataGridView.Rows.Add(row);

Dokümanlara göre: "CreateCells () mevcut hücreleri temizler ve şablonlarını sağlanan DataGridView şablonuna göre ayarlar".


2
Teşekkürler bu benim için çok yararlı oldu, ben "row.CreateCells (myDataGridView);"
— f4d0

Denetim, veriye bağlı olduğunda, satırlar programlı olarak DataGridView'ın satır koleksiyonuna eklenemez.
— Darth Sucuk

8

Izgara bir DataSet / tabloya bağlıysa, aşağıdaki gibi bir BindingSource kullanmak daha iyidir

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

İşte bunu yapmanın başka bir yolu

 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

Etiket ekleme gibi Hücre Değeri dizesinden başka bir şeyi değiştirmeniz gerekiyorsa şunu deneyin:

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

ayrıca yeni bir satır oluşturabilir ve bunu DataGridView öğesine aşağıdaki gibi ekleyebilirsiniz:

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

2

Bir Listeyi bağlıyorsanız

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

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

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

DataTable'ı bağlıyorsanız

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

DataGridView öğesinden kopyalama satırı örneği ve Aynı dataGridView öğesine yeni bir satır ekleme:

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; 

Sorunun nasıl çözüleceğini açıklayabilir misiniz?
— 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

Yakaladınız zaten tanımlanmış ise DataSource, Sen alabilirsiniz DataGridView's DataSourceve bir olarak döküm Datatable.

Sonra yeni bir tane ekleyin DataRowve Alan Değerlerini ayarlayın.

Yeni satırı DataTableve değişikliklere kabul edin.

C # 'da böyle bir şey olurdu ..

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

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

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

0

Bir Windows Uygulaması düşünün ve Button Click Event'i kullanarak bu kodu içine yerleştirin.

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

Ama unutmayın, WhichIsTypeyarattığım uzantı yöntemi.


2
Bir soruyu bazı kodlarla cevapladığınızda ve bu kod oluşturduğunuz özel bir uzantı yöntemi gerektirdiğinde ve özel yöntem için kodu eklemediğinizde, bu çok kullanışlı bir yanıt değildir.
— Bryan

Bahşiş için teşekkürler. Bunun için üzgünüm. ancak bu önemli bir
— yöntem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.