2012-04-08 3 views
118

, если добавить строку в DataTableКак добавить новую строку в DataGridView программным

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

Как насчет DataGridView ??

+1

Вы можете добавить данные datatable to datagridview, просто установив источник данных gridview равным datatable 'datagridview1.DataSource = yourDataTable' –

ответ

185

Вы можете сделать:

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

+14

спасибо, если у моего datagridview нет строк, как я могу добавить строку? –

+2

@DavidYeung хорошо в этом случае ответ от MGA может помочь вам, каков ваш источник данных? это данные? если это так, вы можете добавить строку в datatable, а затем обновить источник данных. – Habib

+4

Вы не можете напрямую ссылаться на столбец по имени, как вы это делали: row.Cells ["Column2"]. Value = "XYZ"; ... Сначала нужно искать индекс: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ"; – Tizz

29

Как это:

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 столбцов, но я просто хочу добавить значение в столбцы2 и столбцы6, а остальные остаются пустыми или пустыми. как я могу это сделать?? –

+1

@DavidYeung, вы можете: 'dataGridView1.Rows [1] .Cells [0] .Value =" cell value "'; –

+1

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

18

Добавление новой строки в DGV без каких-либо строк с Add() поднимает SelectionChanged событие, прежде чем вы можете вставить любые данные (или связать объект в свойстве Tag).

Создать клон строку из RowTemplate безопаснее 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

Метод clone() возвратил строку, но без ячеек. row.Cells.Count равен 0. –

+4

Markand: вызов DataGridViewRow.CreateCells для инициализации коллекции ваших ячеек. –

35

Как это:

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

Спасибо, это работает очень хорошо, если у вас есть простой один столбец DataGridView для простых редактируемых списков текста. –

6

Если сетка связана против DataSet/таблицы, его лучше использовать BindingSource как

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

//Add data to dataTable and then call 

bindingSource.ResetBindings(false)  
2

Если вам нужно манипулировать съел что-нибудь в стороне от строки Cell Value, такие как добавление тегов, попробуйте следующее:

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

В качестве примера копирования строки из 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; 
25

позволяет сказать у вас есть 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) 
+1

+1: Это единственное решение, которое на самом деле использует имена столбцов, как определено в 'datagridview.Columns.Add (" columnname ")', не нуждается в DataTable и заканчивается улыбкой – Roland

0

Рассмотрите приложение Windows и используя кнопку Click Event, введите этот код в него.

dataGridView1.Rows 
       .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text }); 
0
//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; 
+0

Можете ли вы объяснить, как это будет решить проблему? – Phani

0

Если you've уже определен DataSource, Вы можете получить DataGridViewDataSource и брось как 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
//header 
dataGridView1.RowCount = 50; 
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0"; 


//add row by cell 
dataGridView1.Rows[1].Cells[0].Value = "cell value"; 
-1
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

+0

спасибо за подсказку. я из этого боюсь.но этот метод не является важным методом – rangeeeer

3

Это, как я добавить строку, если 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 ".

+1

Спасибо, что это было очень полезно для меня, мне не хватало «row.CreateCells (myDataGridView)»; – Nuno

0
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); 
1

здесь есть еще один способ сделать такие

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"); 
    } 
Смежные вопросы