프로그래밍 방식으로 datagridview에 새 행을 추가하는 방법


157

행을 추가하면 DataTable

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

어때요 DataGridView?


2
gridview의 데이터 소스를 datatable과 동일하게 설정하여 datagridview에 데이터 테이블의 데이터를 추가 할 수 있습니다.datagridview1.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의 답변이 도움이 될 수 있습니다. 데이터 소스는 무엇입니까? 데이터 테이블입니까? 그렇다면 데이터 테이블에 행을 추가 한 다음 데이터 소스를 새로 고칠 수 있습니다.
Habib

7
다음과 같이 이름으로 열을 직접 참조 할 수 없습니다. row.Cells [ "Column2"]. Value = "XYZ"; ... 먼저 색인을 찾아야합니다. row.Cells [yourDataGridView.Columns [ "Column2"]. Index] .Value = "XYZ";
Tizz

2
이상적으로의를 복제해야 RowTemplate합니다 DataGridView. 의 다른 행에 서로 다른 스타일이있는 경우 더 많은 문제가됩니다 DataGridView.
Anthony

7
약 20 가지 솔루션 (Google에서 찾은)을 읽은 후 이것이 내가 처음 이해하는 것입니다.
C4d

49

이처럼 :

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

감사합니다. 단순히 편집 가능한 텍스트 목록을위한 간단한 단일 열 DataGridView가있는 경우 실제로 작동합니다.
Bob Moss

그리드 뷰에 할당 된 데이터 소스가없는 경우에
효과적입니다.

컨트롤이 데이터 바인딩 된 경우 행을 프로그래밍 방식으로 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에 추가하고 나머지는 null 또는 empty 유지합니다. 어떻게해야합니까 ??
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 addedRowIndex = dataGridViewRows.Add (); var addedRow = dataGridViewRows [addedRowIndex]; 이제 모든 값이 기본값으로 채워 지므로 기본값이 아닌 셀만 변경하면됩니다. addedRow.Cells [column2.Index] .Value = myValue; (
column2

24

아니 행으로 DGV에 새 행을 추가 추가 ()는 던질 수 인 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를 호출하여 Cells 콜렉션을 초기화하십시오.
조용한 톤

컨트롤이 데이터 바인딩 된 경우 행을 프로그래밍 방식으로 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

그리드가 DataSet / 테이블에 바인딩되어 있으면 다음과 같은 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
//header
dataGridView1.RowCount = 50;
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0";


//add row by cell 
 dataGridView1.Rows[1].Cells[0].Value = "cell value";

1

피고측은 이미 정의 된 경우 DataSource, 당신은 얻을 수 DataGridView의를 DataSource하고로 캐스팅 Datatable.

그런 다음 새 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 응용 프로그램을 고려하고 Button Click Event를 사용 하여이 코드를 넣으십시오.

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
일부 코드로 질문에 답변 할 때 해당 코드에 사용자 정의 확장 메소드가 필요하고 사용자 정의 메소드에 대한 코드를 포함시키지 않은 경우 굉장히 유용한 답변이 아닙니다.
Bryan

팁 고마워. 나는 그 때문에 지루하다. 그러나 그 방법은 중요한 방법이 아니다
rangeeeer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.