วิธีการเพิ่มแถวใหม่ไปยัง datagridview โดยทางโปรแกรม


157

ถ้าเพิ่มแถวเข้าไป DataTable

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

เกี่ยวกับDataGridView??


2
คุณสามารถเพิ่มข้อมูลของ DataTable ให้กับ DataGridview เพียงแค่ตั้งค่าแหล่งข้อมูลของ Gridview เท่ากับ DataTabledatagridview1.DataSource = yourDataTable
Jonathan Van Dam

คำตอบ:


248

คุณทำได้:

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

หรือ:

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

อีกทางหนึ่ง:

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

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


28
ขอบคุณถ้า datagridview ของฉันไม่มีแถวฉันจะเพิ่มแถวได้อย่างไร
LK Yeung

3
@DavidYeung ในกรณีที่คำตอบจาก MGA สามารถช่วยคุณได้แหล่งข้อมูลของคุณคืออะไร? มันเป็น DataTable? ถ้าเป็นเช่นนั้นคุณสามารถเพิ่มแถวลงใน DataTable จากนั้นรีเฟรชแหล่งข้อมูล
Habib

7
คุณไม่สามารถอ้างอิงคอลัมน์ตามชื่อได้โดยตรงเช่น: row.Cells ["Column2"]. ค่า = "XYZ"; ... คุณต้องค้นหาดัชนีก่อน: row.Cells [yourDataGridView.Columns ["Column2"]. ดัชนี] .Value = "XYZ";
Tizz

2
เป็นการดีที่คุณควรโคลนของRowTemplate นี้จะกลายเป็นมากขึ้นของปัญหาเมื่อคุณมีรูปแบบที่แตกต่างกันในแถวที่แตกต่างกันในDataGridView DataGridView
แอนโธนี

7
หลังจากอ่านโซลูชันประมาณ 20 รายการ (ค้นพบโดย google) นี่เป็นโซลูชันแรกที่ฉันเข้าใจ
C4d

50

แบบนี้:

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

ขอบคุณนี้ใช้งานได้ดีจริงๆถ้าคุณมี DataGridView แบบคอลัมน์เดียวสำหรับรายการข้อความที่แก้ไขได้ง่าย
Bob Moss

มันใช้งานได้ดีในกรณีที่คุณไม่มีแหล่งข้อมูลที่กำหนดให้กับมุมมองกริด
Jhabar

แถวไม่สามารถเพิ่มโดยทางโปรแกรมลงในคอลเลกชันแถวของ DataGridView เมื่อตัวควบคุมถูกผูกข้อมูล
Darth Sucuk

39

ให้บอกว่าคุณมี DataGridview ที่ไม่ผูกพันกับชุดข้อมูลและคุณต้องการเติมแถวใหม่โดยทางโปรแกรม ...

นี่คือวิธีที่คุณทำ

// 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: นี่เป็นทางออกเดียวที่ใช้ชื่อคอลัมน์ตามที่กำหนดโดยdatagridview.Columns.Add("columnname")ไม่จำเป็นต้องมี DataTable และลงท้ายด้วยรอยยิ้ม
Roland

32

แบบนี้:

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

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

หรือคุณจำเป็นต้องตั้งค่าให้แต่ละคนใช้คนที่เหมาะสม.Rows()เช่นนี้:

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

1
ขอบคุณ. ถ้า datagridview มี 30 คอลัมน์ แต่ฉันแค่อยากจะเพิ่มค่าให้กับ column2 และ column6 และที่เหลือให้เป็นโมฆะหรือว่างเปล่า ฉันจะทำสิ่งนี้ได้อย่างไร ??
LK Yeung

1
@ DavidYeung แน่นอนว่าคุณสามารถ: dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal

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

int addRowIndex = dataGridViewRows.Add (); var addRow = dataGridViewRows [addRowIndex]; ตอนนี้ค่าทั้งหมดจะเต็มไปด้วยค่าเริ่มต้นคุณจะต้องเปลี่ยนเซลล์ที่ไม่ใช่ค่าเริ่มต้น: addRow.Cells [column2.Index] .Value = myValue; (สมมติว่าคอลัมน์ 2 เป็น DataGridViewColumn)
Harald Coppoolse

24

การเพิ่มแถวใหม่ใน DGV โดยไม่มีแถวที่มีAdd ()ทำให้เกิดเหตุการณ์SelectionChangedก่อนที่คุณจะสามารถแทรกข้อมูลใด ๆ (หรือผูกวัตถุในคุณสมบัติแท็ก)

สร้างแถวโคลนจากRowTemplateปลอดภัยยิ่งขึ้น:

//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 () วิธีการคืนแถว แต่ไม่มีเซลล์ row.Cells.Count คือ 0
MARKAND Bhatt

5
Markand: โทร DataGridViewRow.CreateCells เพื่อเริ่มต้นการรวบรวมเซลล์ของคุณ
น้ำเสียงเงียบ

แถวไม่สามารถเพิ่มโดยทางโปรแกรมลงในคอลเลกชันแถวของ DataGridView เมื่อตัวควบคุมถูกผูกข้อมูล
Darth Sucuk

10

นี่คือวิธีที่ฉันเพิ่มแถวถ้า dgrview ว่างเปล่า: (myDataGridView มีสองคอลัมน์ในตัวอย่างของฉัน)

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

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

myDataGridView.Rows.Add(row);

ตามเอกสาร: "CreateCells () ล้างเซลล์ที่มีอยู่และตั้งค่าแม่แบบของตนตามเทมเพลต DataGridView ที่ให้มา"


2
ขอบคุณนี้มีประโยชน์มากสำหรับฉันฉันหายไป "row.CreateCells (myDataGridView);"
f4d0

แถวไม่สามารถเพิ่มโดยทางโปรแกรมลงในคอลเลกชันแถวของ DataGridView เมื่อตัวควบคุมถูกผูกข้อมูล
Darth Sucuk

8

ถ้าตารางถูกผูกไว้กับชุดข้อมูล / ตารางดีกว่าที่จะใช้ BindingSource เช่น

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

นี่เป็นอีกวิธีในการทำเช่นนี้

 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

หากคุณต้องการจัดการอะไรนอกเหนือจากสตริงค่าของเซลล์เช่นการเพิ่มแท็กลองสิ่งนี้:

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

คุณยังสามารถสร้างแถวใหม่แล้วเพิ่มลงใน DataGridView เช่นนี้:

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

2

หากคุณมีผลผูกพันรายการ

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

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

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

หากคุณผูกพัน DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

ตัวอย่างของการคัดลอกแถวจาก dataGridView และเพิ่มแถวใหม่ใน 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; 

คุณกรุณาอธิบายว่ามันจะแก้ปัญหาได้อย่างไร
Phani


1

ถ้าทำได้ตามที่กำหนดไว้แล้วDataSource, คุณจะได้รับDataGridViewของและโยนมันทิ้งเป็นDataSourceDatatable

จากนั้นเพิ่มใหม่DataRowและตั้งค่าฟิลด์

เพิ่มแถวใหม่ไปที่DataTableและยอมรับการเปลี่ยนแปลง

ใน C # มันจะเป็นอย่างนี้ ..

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

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

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

0

พิจารณาแอพพลิเคชั่นของ Windows และการใช้ปุ่มคลิกเหตุการณ์ใส่รหัสนี้

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

แต่ระวังWhichIsTypeเป็นวิธีการขยายที่ฉันสร้างขึ้น


2
เมื่อคุณตอบคำถามด้วยรหัสบางรหัสและรหัสนั้นต้องใช้วิธีการขยายที่กำหนดเองที่คุณสร้างขึ้นและคุณไม่ได้รวมรหัสสำหรับวิธีการที่กำหนดเองมันไม่ใช่คำตอบที่มีประโยชน์มาก
ไบรอัน

ขอบคุณสำหรับทิป. ฉันเสียใจเพราะสิ่งนั้น แต่ methode นั้นไม่ใช่ methode ที่สำคัญ
rangeeeer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.