Как программно добавить новую строку в datagridview

157

если добавить строку в DataTable

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

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

Л.К. Юнг
источник
2
Вы можете добавить данные таблицы данных в сетку данных, просто установив источник данных таблицы сетки равным таблице данныхdatagridview1.DataSource = yourDataTable
Джонатан Ван Дам

Ответы:

249

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

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 может помочь вам, каков ваш источник данных? это дата? если это так, вы можете добавить строку в таблицу данных и затем обновить источник данных
Хабиб,
7
Вы не можете напрямую ссылаться на столбец по имени, как вы это делали: row.Cells ["Column2"]. Value = "XYZ"; ... Сначала нужно найти индекс: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .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 для простых редактируемых списков текста.
Боб Мосс
Это прекрасно работает в том случае, если у вас нет источника данных, назначенного для вида сетки
Jhabar
Строки не могут быть программно добавлены в коллекцию строк DataGridView, когда элемент управления привязан к данным.
Дарт Суцук
39

Допустим, у вас есть сетевое представление, которое не связано с набором данных, и вы хотите программно заполнить новые строки ...

Вот как ты это делаешь.

// 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
источник
3
+1: это единственное решение, которое на самом деле использует имена столбцов в соответствии с определением datagridview.Columns.Add("columnname"), не нуждается в DataTable и заканчивается улыбкой
Роланд
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";
Махмуд Гамаль
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 является DataGridViewColumn)
Харальд Копполс
24

Добавление новой строки в 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);
Defkon1
источник
3
Метод Clone () возвратил строку, но без ячеек. row.Cells.Count равно 0.
МАРКАНД Бхатт,
5
Markand: вызов DataGridViewRow.CreateCells для инициализации вашей коллекции Cells.
тихий тон
Строки не могут быть программно добавлены в коллекцию строк DataGridView, когда элемент управления привязан к данным.
Дарт Суцук
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».

Snorvarg
источник
2
Спасибо, это было очень полезно для меня, мне не хватало "row.CreateCells (myDataGridView);"
f4d0
Строки не могут быть программно добавлены в коллекцию строк DataGridView, когда элемент управления привязан к данным.
Дарт Суцук
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"); 
    }
RC-AI
источник
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);
F.joksch
источник
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; 
Рей Салазар
источник
Не могли бы вы объяснить, как это решит проблему?
Фани
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

Если вы уже определили a DataSource, вы можете получить DataGridView´s DataSourceи разыграть его как a 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();
luchezco
источник
0

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

dataGridView1.Rows
                .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text });
Dotnet
источник
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это метод расширения, который я создал.

rangeeeer
источник
2
Когда вы отвечаете на вопрос с помощью некоторого кода, и этот код требует созданного вами пользовательского метода расширения, и вы не включили код для пользовательского метода, это не очень полезный ответ.
Брайан
Спасибо за чаевые. я извиняюсь из-за этого. но этот метод не является важным
методом