Cách thêm một hàng mới vào datagridview theo lập trình


157

nếu thêm hàng vào DataTable

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

Thế còn DataGridView??


2
Bạn có thể thêm dữ liệu của một cơ sở dữ liệu vào một datagridview chỉ bằng cách đặt nguồn dữ liệu của chế độ xem lưới bằng với khả năng truy cậpdatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Câu trả lời:


248

Bạn có thể làm:

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

hoặc là:

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

Cách khác:

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

Từ: http://msdn.microsoft.com/en-us/l Library / system.windows.forms.datagridview.rows.aspx


28
cảm ơn bạn, nếu datagridview của tôi không có hàng, làm thế nào tôi có thể thêm hàng?
LK Yeung

3
@DavidYeung trong trường hợp đó câu trả lời từ MGA có thể giúp bạn hiểu, nguồn dữ liệu của bạn là gì? nó là một dữ liệu? nếu vậy bạn có thể thêm hàng vào dữ liệu và sau đó làm mới nguồn dữ liệu
Habib

7
Bạn không thể trực tiếp tham chiếu một cột theo tên như bạn đã làm: row.Cells ["Cột2"]. Value = "XYZ"; ... Bạn phải tra cứu chỉ mục trước: row.Cells [yourDataGridView.Columns ["Cột2"]. Index] .Value = "XYZ";
Tizz

2
Lý tưởng nhất, bạn nên nhân bản RowTemplatecủa DataGridView. Điều này trở thành một vấn đề khi bạn có các kiểu khác nhau trên các hàng khác nhau trong DataGridView.
Anthony

7
Sau khi đọc khoảng 20 giải pháp (được tìm thấy bởi google), đây là giải pháp đầu tiên tôi hiểu.
C4d

49

Như thế này:

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

Cảm ơn, điều này hoạt động thực sự tốt nếu bạn có một cột DataGridView đơn giản cho các danh sách văn bản có thể chỉnh sửa đơn giản.
Bob Moss

Nó hoạt động rất tốt trong trường hợp khi bạn không có nguồn dữ liệu được gán cho chế độ xem lưới
Jhabar

Các hàng không thể được thêm bằng lập trình vào bộ sưu tập hàng của DataGridView khi điều khiển bị ràng buộc dữ liệu.
Darth Sucuk

39

Hãy nói rằng bạn có một datagridview không bị ràng buộc với một tập dữ liệu và bạn muốn lập trình các hàng mới theo chương trình ...

Đây là cách bạn làm điều đó.

// 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: Đây là giải pháp duy nhất thực sự sử dụng các tên cột như được xác định bởi datagridview.Columns.Add("columnname"), không cần DataTable và kết thúc bằng một nụ cười
Roland

32

Như thế này:

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

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

Hoặc bạn cần đặt ở đó các giá trị sử dụng riêng lẻ .Rows(), như thế này:

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

1
cảm ơn bạn. nếu datagridview có 30 cột, nhưng tôi chỉ muốn thêm giá trị vào cột2 và cột6 và phần còn lại giữ trống hoặc trống. tôi có thể làm cái này như thế nào??
LK Yeung

1
@DavidYeung, Chắc chắn bạn có thể : dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal

1
dataGridView.Rows.Add (null, 2, null, null, null, 6);
MrFox

int thêmRow Index = dataGridViewRows.Add (); var thêmRow = dataGridViewRows [thêmRow Index]; bây giờ tất cả các giá trị được điền với giá trị mặc định, bạn chỉ phải thay đổi các ô không mặc định: thêmRow.Cells [cột2.Index] .Value = myValue; (giả sử cột2 là DataGridViewColumn)
Harald Coppoolse

24

Việc thêm một hàng mới trong DGV không có hàng nào với Add () sẽ làm tăng sự kiện SelectionChanged trước khi bạn có thể chèn bất kỳ dữ liệu nào (hoặc liên kết một đối tượng trong thuộc tính Tag).

Tạo một hàng nhân bản từ RowTemplate sẽ an toàn hơn 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
Phương thức Clone () trả về một hàng nhưng không có ô. row.Cells.Count là 0.
MARKAND Bhatt

5
Markand: Gọi DataGridViewRow.CreateCells để khởi tạo bộ sưu tập Cells của bạn.
giai điệu im lặng

Các hàng không thể được thêm bằng lập trình vào bộ sưu tập hàng của DataGridView khi điều khiển bị ràng buộc dữ liệu.
Darth Sucuk

10

Đây là cách tôi thêm một hàng nếu dgrview trống: (myDataGridView có hai cột trong ví dụ của tôi)

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

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

myDataGridView.Rows.Add(row);

Theo tài liệu: "CreateCells () xóa các ô hiện có và đặt mẫu của chúng theo mẫu DataGridView được cung cấp".


2
Cảm ơn điều này rất hữu ích cho tôi, tôi đã thiếu "row.CreateCells (myDataGridView);"
f4d0

Các hàng không thể được thêm bằng lập trình vào bộ sưu tập hàng của DataGridView khi điều khiển bị ràng buộc dữ liệu.
Darth Sucuk

8

Nếu lưới được liên kết với Dataset / bảng thì tốt hơn là sử dụng BindingSource như

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

đây là một cách khác để làm như vậy

 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

Nếu bạn cần thao tác bất cứ thứ gì ngoài chuỗi Giá trị di động, chẳng hạn như thêm Thẻ, hãy thử điều này:

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

bạn cũng có thể tạo một hàng mới và sau đó thêm nó vào DataGridView như thế này:

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

2

Nếu bạn đang ràng buộc một danh sách

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

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

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

Nếu bạn đang ràng buộc DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

Một ví dụ về hàng sao chép từ dataGridView và thêm một hàng mới trong cùng 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; 

Bạn có thể vui lòng giải thích làm thế nào nó sẽ giải quyết vấn đề?
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

Nếu bạn đã xác định được a DataSource, Bạn có thể lấy các DataGridViewbiểu tượng DataSourcevà chuyển nó thành a Datatable.

Sau đó thêm một DataRowgiá trị mới và đặt Giá trị Trường.

Thêm hàng mới vào DataTablevà Chấp nhận các thay đổi.

Trong C #, nó sẽ giống như thế này ..

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

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

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

0

Hãy xem xét một Ứng dụng Windows và sử dụng Nút Bấm Sự kiện đặt mã này vào đó.

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

Nhưng hãy lưu ý, WhichIsTypelà phương pháp mở rộng tôi tạo ra.


2
Khi bạn trả lời một câu hỏi với một số mã và mã đó yêu cầu một phương thức mở rộng tùy chỉnh mà bạn đã tạo và bạn không bao gồm mã cho phương thức tùy chỉnh, đó không phải là một câu trả lời cực kỳ hữu ích.
Bryan

cảm ơn vì tiền hỗ trợ. tôi không thể tin được điều đó nhưng metode đó không phải là một methode quan trọng
rangeeeer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.