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??

LK Yeung
sumber
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

Habib
sumber
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;
//....
Jizakh
sumber
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)
Overdrive77
sumber
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";
Mahmoud Gamal
sumber
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);
Defkon1
sumber
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".

Snorvarg
sumber
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)    
Anders
sumber
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"); 
    }
RC-AI
sumber
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);
nada diam
sumber
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);
F.joksch
sumber
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);
Mohammad Salmanian
sumber
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;
Sherif Hamdy
sumber
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; 
Rei Salazar
sumber
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";
Khan
sumber
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();
luchezco
sumber
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 });
DotNET
sumber
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.

rangeeeer
sumber
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