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.