2012-03-07 15 views
7

DataGridViewにデータソース(SQL)のデータが入力されています。今私は、追加新しい行にしたいが、私がすることはできません、新しいデータが有界のDataGridViewに追加することはできませんので...DataGridviewに新しい行を追加するには?

は私がしようとしていた。

dataGridView1.Source = null; 
dataGridView1.Rows.Add("1"); 

が、それは私の前をクリアテーブルのデータ。以前のデータを削除せずに新しい行を追加するにはどうすればいいですか?

答えて

5

、あなたは基本的に(それはもはやにバインドするかを知らないため)DataGridViewからすべてデータを削除しています。

ここには2つのオプションがあります。 1つは、基礎となるデータソースを更新することです。それがDataTableだとしましょう。この場合は、次のような何かをしたい:

DataTable dt = dataGridView1.Source as DataTable; 
dt.Rows.Add(new object[] { ... }); 

をそしてDataGridViewは(あなたがINotifyCollectionChanged interfaceを実装していないものに結合されていない場合、あなたが持っているだろうことに注意して変更にピックアップしますグリッドが更新されるようにResetBindings methodと呼ぶ)。

もう1つの方法は、DataGridViewに行を管理させることです。手動でRows propertyによって返さDataGridViewRowCollectionAdd methodを使用して、各項目を追加することによってこれを行うことができます。

foreach (var item in source) 
{ 
    dataGridView1.Rows.Add("1", "2", "3", ...); 
} 

私は第二の溶液は最適で言わないだろうが、それは動作します。

最後に、DataTable(または基礎となるデータソースからのデータの他のマテリアライゼーション)にバインドしていると仮定すると、基礎となるデータソースを更新することはありません(これは別の質問です)。

1

短い答えはありません。

DataSourceをnullに設定すると、DataGridViewとデータソースとの間のリンクが切断され、そのデータは保持されません。バインドされたDataGridViewに行を追加することはできません。その理由は、それが基礎となるDataSourceの状態を表すためです。最初の場所でデータバインディングの目的を破って、バッキングストアとテーブルを同期させないように.netに効果的に問い合わせています。

バッキングストアにローを追加する場合は、DataGridViewではなく、DataSourceにローを追加する必要があります。

+0

Tnx、DataSourceに行を追加する方法を教えてください。私は私の最初のGridViewに追加したいデータを持つ別のDataGridViewを持っています.. – Bodi

+0

バッキングストアがSQLテーブルの場合は、そのテーブルにINSERTを実行すると思います。 –

+0

これはSQLからではありません。最初のテーブルに追加して印刷するデータが生成されています;) – Bodi

0

多分あなたは手作業で詳細にしたいと思っていますか?このようなもの?あなたはnullDataSource propertyを設定すると

 DataSet ds = new DataSet(); 
     OleDbDataAdapter adapter = null; 
     adapter = new OleDbDataAdapter("SELECT * FROM WHERE", conn); 
     adapter.Fill(ds); 
     dataGridView1.ColumnCount = 5; //how many columns returns your SQL query? starts with 0 

     dataGridView1.Columns[0].Name = "COl-1"; 
     dataGridView1.Columns[1].Name = "COl-2"; 
     dataGridView1.Columns[2].Name = "COl-3"; 
     dataGridView1.Columns[3].Name = "COl-4"; 
     dataGridView1.Columns[4].Name = "COl-5"; 

     DataTable dt = ds.Tables[0]; 

     foreach (DataRow dr in dt.Rows) 
     { 
      dataGridView1.Rows.Add(
      (dr["COL_HEADER_NAME1"].ToString()), 
      (dr["COL_HEADER_NAME2"].ToString()), 
      (dr["COL_HEADER_NAME3"].ToString()), 
      (dr["COL_HEADER_NAME4"].ToString()), 
      (dr["COL_HEADER_NAME5"].ToString())); 
     } 
0

あなただけのあなたは、配列のコレクションを持つアイテムの任意の量を追加することができ、行コレクションの方法

me.datagridview1.rows.add("first","second","third"); 

を追加使用して行を追加します。

関連する問題