Bagaimana cara menambahkan baris baru ke dalam datagridview secara terprogram


157

jika tambahkan baris ke DataTable

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

Bagaimana DataGridView??


2
Anda dapat menambahkan data datatable ke datagridview hanya dengan mengatur sumber data gridview sama dengan datatabledatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Jawaban:


249

Anda dapat melakukan:

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

atau:

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

Cara lain:

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

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


28
terima kasih, jika datagridview saya tidak memiliki baris, bagaimana saya bisa menambahkan baris?
LK Yeung

3
@ Davidvide juga dalam hal ini jawaban dari MGA dapat membantu Anda, apa sumber data Anda? apakah ini datatable? Jika demikian, Anda dapat menambahkan baris ke datatable dan kemudian me-refresh sumber data
Habib

7
Anda tidak dapat secara langsung mereferensikan kolom dengan nama seperti yang Anda lakukan: row.Cells ["Column2"]. Value = "XYZ"; ... Anda harus melihat indeks terlebih dahulu: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
Tizz

2
Idealnya, Anda harus mengkloning RowTemplatedari DataGridView. Ini menjadi lebih dari masalah ketika Anda memiliki gaya berbeda di berbagai baris di DataGridView.
Anthony

7
Setelah membaca sekitar 20 solusi (ditemukan oleh google) ini adalah yang pertama yang saya mengerti.
C4d

50

Seperti ini:

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

Terima kasih, ini bekerja sangat baik jika Anda memiliki satu kolom DataGridView untuk daftar teks sederhana yang dapat diedit.
Bob Moss

Ini berfungsi dengan baik jika Anda tidak memiliki sumber data yang ditugaskan ke tampilan grid
Jhabar

Baris tidak dapat secara pemrograman ditambahkan ke koleksi baris DataGridView ketika kontrol terikat data.
Darth Sucuk

39

Katakanlah Anda memiliki datagridview yang tidak terikat pada dataset dan Anda ingin mengisi baris baru secara terprogram ...

Begini caranya.

// 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: Ini adalah satu-satunya solusi yang benar-benar menggunakan nama kolom seperti yang didefinisikan oleh datagridview.Columns.Add("columnname"), tidak memerlukan DataTable, dan diakhiri dengan senyuman
Roland

32

Seperti ini:

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

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

Atau Anda perlu mengatur di sana nilai secara individual menggunakan propery .Rows(), seperti ini:

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

1
Terima kasih. jika datagridview memiliki 30 kolom, tetapi saya hanya ingin menambahkan nilai ke kolom2 dan kolom6 dan sisanya tetap nol atau kosong. bagaimana saya bisa melakukan ini ??
LK Yeung

1
@DavidYeung, Tentu saja bisa: 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]; sekarang semua nilai diisi dengan nilai default, Anda hanya perlu mengubah sel-sel yang tidak default: addedRow.Cells [column2.Index] .Value = myValue; (dengan asumsi column2 adalah DataGridViewColumn)
Harald Coppoolse

24

Menambahkan baris baru di DGV tanpa baris dengan Add () memunculkan SelectionChanged event sebelum Anda bisa memasukkan data apa pun (atau mengikat objek di properti Tag).

Membuat baris klon dari RowTemplate lebih aman:

//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
Metode Clone () mengembalikan baris tetapi tanpa Sel. row.Cells.Count adalah 0.
MARKAND Bhatt

5
Markand: Panggil DataGridViewRow.CreateCells untuk menginisialisasi koleksi Sel Anda.
nada sunyi

Baris tidak dapat secara pemrograman ditambahkan ke koleksi baris DataGridView ketika kontrol terikat data.
Darth Sucuk

10

Ini adalah bagaimana saya menambahkan baris jika dgrview kosong: (myDataGridView memiliki dua kolom pada contoh saya)

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

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

myDataGridView.Rows.Add(row);

Menurut dokumen: "CreateCells () membersihkan sel yang ada dan menetapkan templatnya sesuai dengan templat DataGridView yang disediakan".


2
Terima kasih ini sangat berguna bagi saya, saya kehilangan "row.CreateCells (myDataGridView);"
f4d0

Baris tidak dapat secara pemrograman ditambahkan ke koleksi baris DataGridView ketika kontrol terikat data.
Darth Sucuk

8

Jika grid terikat terhadap DataSet / tabel lebih baik menggunakan sejenis BindingSource

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

di sini ada cara lain untuk melakukan itu

 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

Jika Anda perlu memanipulasi apa pun selain dari string Nilai Sel seperti menambahkan Tag, coba ini:

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

Anda juga dapat membuat baris baru dan kemudian menambahkannya ke DataGridView seperti ini:

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

2

Jika Anda mengikat suatu Daftar

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

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

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

Jika Anda mengikat DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

Contoh salin baris dari dataGridView dan tambahkan baris baru di dataGridView yang sama:

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; 

Bisakah Anda jelaskan bagaimana hal itu akan menyelesaikan masalah?
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

Jika youve sudah didefinisikan suatu DataSource, Anda bisa mendapatkan DataGridViewini DataSourcedan dilemparkan sebagai Datatable.

Kemudian tambahkan yang baru DataRowdan atur Nilai Bidang.

Tambahkan baris baru ke DataTabledan Terima perubahan.

Dalam C # itu akan menjadi sesuatu seperti ini ..

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

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

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

0

Pertimbangkan Aplikasi Windows dan menggunakan Acara Klik Tombol masukkan kode ini di dalamnya.

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

Namun perlu diperhatikan, WhichIsTypeadalah metode ekstensi yang saya buat.


2
Ketika Anda menjawab pertanyaan dengan beberapa kode, dan kode itu memerlukan metode ekstensi khusus yang Anda buat, dan Anda tidak memasukkan kode untuk metode khusus, itu bukan jawaban yang sangat berguna.
Bryan

terima kasih atas tipnya. Saya yakin karena itu. tetapi metode itu bukan metode yang penting
pengukur jarak
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.