Як додати новий рядок до datagridview програмно


157

якщо додати рядок до DataTable

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

Як щодо DataGridView??


2
Ви можете додати дані даних в Datagridview, просто встановивши джерело даних gridview рівним данихtabledatagridview1.DataSource = yourDataTable
Джонатан Ван Дам

Відповіді:


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 може допомогти вам, яке джерело ваших даних? це дані? якщо так, ви можете додати рядок до даних, а потім оновити джерело даних
Хабіб

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

2
В ідеалі, ви повинні клонувати RowTemplateз DataGridView. Це стає більшою проблемою, коли у вас є різні стилі в різних рядках DataGridView.
Ентоні

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 для простих редагованих списків тексту.
Боб Мосс

Він чудово працює в тому випадку, коли у вас немає джерела даних, призначеного для перегляду сітки
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)

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 стовпців, але я просто хочу додати значення в колонку2 і стовпчик6, а решта зберегти нулеву або порожню. як я можу це зробити ??
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; (якщо припустити, що колонка2 є DataGridViewColumn)
Харальд Коппулз

24

Додавання нового рядка в DGV без рядків з Add () викликає подію SelectionChanged, перш ніж ви зможете вставити будь-які дані (або прив'язати об'єкт до властивості Tag).

Створити рядок клонування з 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 is 0.
MARKAND Bhatt

5
Марканд: Виклик DataGridViewRow.CreateCells, щоб ініціалізувати вашу колекцію клітин.
тихим тоном

Рядки не можуть бути програмно додані до колекції рядків 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".


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

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

Якщо ви вже визначили "a" DataSource, ви можете отримати DataGridView" 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();

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
Коли ви відповідаєте на запитання з допомогою якогось коду, і цей код вимагає створеного вами методу розширення, і ви не включили код для спеціального методу, це не дуже корисна відповідь.
Брайан

дякую за пораду. Мені дуже доречно. але цей метод не є важливим
методом
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.