プログラムでdatagridviewに新しい行を追加する方法


157

行を追加する場合 DataTable

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

どうDataGridViewですか?


2
gridviewのdatasourceをdatatableに設定するだけで、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ヨン

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のソリューションを読んだ後、これは私が理解する最初のものです。
C4d 2015

49

このような:

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

おかげで、これはテキストの単純な編集可能なリスト用の単純な単一列のDataGridViewがある場合に非常にうまく機能します。
ボブ・モス

グリッドビューにデータソースが割り当てられていない場合に最適です
Jhabar

コントロールがデータバインドされている場合、行をDataGridViewの行コレクションにプログラムで追加することはできません。
Darth Sucuk、2018年

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または空のままにします。これどうやってするの??
LKヨン2012

1
@DavidYeung、確かに次のことができます:dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal 2012

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であると想定)
Harald Coppoolse 2017年

24

行のないDGVに新しい行を追加)(追加する提起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です
MARKAND Bhattさん

5
Markand:DataGridViewRow.CreateCellsを呼び出してCellsコレクションを初期化します。
サイレントトーン

コントロールがデータバインドされている場合、行をDataGridViewの行コレクションにプログラムで追加することはできません。
Darth Sucuk、2018年

10

これは、dgrviewが空の場合に行を追加する方法です(例ではmyDataGridViewに2つの列があります)。

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 2017

コントロールがデータバインドされている場合、行をDataGridViewの行コレクションにプログラムで追加することはできません。
Darth Sucuk、2018年

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

you'veがすでに定義されている場合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アプリケーションを検討し、ボタンクリックイベントを使用してこのコードを挿入します。

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.