C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# DataGridViewへの行追加について

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90822 / inTopicNo.1)  C# DataGridViewへの行追加について
  
□投稿者/ muu (1回)-(2019/04/25(Thu) 04:36:40)

分類:[.NET 全般] 

2019/05/17(Fri) 13:55:52 編集(投稿者)
C#を使っています。(開発環境はVisual Studio Express 2017)

DataGridViewにデータバインドする形で設定をしています。
イベントによってDataGridViewへの行追加を行いたいのですがその方法について教えていただけないでしょうか?

現在、当方では下記のようなコードを書きましたが例外が発生しています。

コード (indexには1以上の整数が入る)

            try
            {
                DataTable dataTable = (DataTable)dgEdit.DataSource;
                DataRow drToAdd = dataTable.NewRow();

                dgEdit.Rows.Insert(index, drToAdd);
            }
            catch (Exception ex)
            {
                ;
            }
            finally
            {
            }


発生している例外
System.InvalidCastException: Unable to cast object of type 'System.Windows.Forms.BindingSource' to type 'System.Data.DataTable'.

引用返信 編集キー/
■90823 / inTopicNo.2)  Re[1]: C# DataGridViewへの行追加について
□投稿者/ Hongliang (790回)-(2019/04/25(Thu) 07:15:15)
どうやってバインディングさせたのか知りませんが、例外を見る限り、バインディングは
DataGridView <- BindingSource <- DataTable
という形で行われているのでしょう。
DataGridViewのDataSourceをBidingSourceとして受け取り、さらにそのBindingSourceのDataSourceをDataTableとして受け取ることになるでしょうか。
// データソースを動的に切り替えたいのでなければ、フィールドにDataTableを置いておいてそれを直接使った方が楽ですが。

また、データバインディングしている時は、DataGridView.RowsにAddしたりInsertしたりといったことはできません。
データソース(今回の場合はDataTable)の方に追加する必要があります。
引用返信 編集キー/
■90830 / inTopicNo.3)  Re[2]: C# DataGridViewへの行追加について
□投稿者/ ぶなっぷ (196回)-(2019/04/25(Thu) 16:46:07)
例外の内容からして、以下の行で発生していると思われます。
> DataTable dataTable = (DataTable)dgConditionEdit.DataSource;

DataSourceに何が入っているかが示されていないけど、
とにかく、そこに入っているものは、DataTableにキャスト可能なもの
ではないと言っています。

あと、Hongliangさんもおっしゃってますが、
バインディングをしてるなら、dgConditionEditには、
  dgConditionEdit.Rows.Insert()
とかすべきではありません。

バインディングソース(話通りならDataTableのはずだが、例外の内容
からして違うような?)にレコードを追加すべきです。
そうすれば、勝手にDataGridViewにも追加されます。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ