質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

8040閲覧

ComboBoxのデータソースにDataTableを紐づけた状態でDataTable.Rows.Clear() → 例外

makoyang

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/01/18 08:51

###ソースコード

Sample.cs

C#

1 /// <summary> 2 /// メインフォーム ロード時のイベントハンドラ 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void MainForm_Load(object sender, EventArgs e) 7 { 8 // 店舗ドロップダウンリストに紐付けるデータテーブルの初期化 9 { 10 _storeList = new DataTable(); 11 12 _storeList.Columns.Add("STORE_CODE", typeof(string)); 13 _storeList.Columns.Add("STORE_NAME", typeof(string)); 14 15 StoreComboBox.DataSource = _storeList; 16 17 StoreComboBox.DisplayMember = "STORE_NAME"; 18 StoreComboBox.ValueMember = "STORE_CODE"; 19 } 20 } 21 22 private bool UpdateStoreListComboBox() 23 { 24 bool isSuccess = true; 25 26 try 27 { 28 _storeList.Rows.Clear(); // ここでエラー(初回はOK) 29 30 StringBuilder query = new StringBuilder(); 31 32 query.AppendLine("SELECT"); 33 query.AppendLine(" CD_TENPO,"); 34 query.AppendLine(" CR_KANZIMEI"); 35 query.AppendLine("FROM"); 36 query.AppendLine(" MST_TENPO"); 37 query.AppendLine("WHERE"); 38 query.AppendLine(" DT_HEITEN = '1900-01-01'"); 39 40 SqlCommand sqlCommand = new SqlCommand(query.ToString(), _con); 41 42 SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); 43 44 while (sqlDataReader.Read()) 45 { 46 DataRow dataRow = _storeList.NewRow(); 47 48 dataRow["STORE_CODE"] = (string)sqlDataReader["CD_TENPO"]; 49 dataRow["STORE_NAME"] = (string)sqlDataReader["CR_KANZIMEI"]; 50 51 _storeList.Rows.Add(dataRow); 52 } 53 54 _storeList.AcceptChanges(); 55 56 sqlDataReader.Close(); 57 } 58 catch (Exception except) 59 { 60 isSuccess = false; 61 MessageBox.Show(except.Message); 62 } 63 64 return isSuccess; 65 }

###問題
ComboBoxのデータソースにDataTableを紐づけて使用したいのですが、DataTableにデータ追加後、データクリア(DataTable.Rows.Clear())を行うと**「オブジェク参照にオブジェクトインスタンスが設定されていません。」**とエラーメッセージボックス表示されます。
また不思議というか理解できないのが、このようなエラーが発生しているにも関わらず、例外をキャッチすることができません。(じゃあ、誰がこのエラーメッセージボックスを表示させているのか...?)
またデータクリアでエラーが発生しても後続の処理も問題なく行われます。処理としてはできているので問題ないといえば、問題ないのですが、どのような問題があってこのエラーメッセージボックスが表示されているかを知りたいです。
識者の方々のアドバイスを頂けたら幸いと思います。

###開発環境

  • OS Windows7 professional x86
  • IDE VisualStudio2017 community
  • 言語 C#
  • プロジェクト形式 Windowsフォームアプリ(.NET framework3.5)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

すいません、自己解決しました。

結果から言うと

C#

1_storeList.Rows.Clear(); // ここでエラー(初回はOK)

は問題のトリガーでは有りましたが、直接は関係ありませんでした。

DataTableをクリアした際にコンボボックスのSelectedIndexChangedのイベントが飛んでいて、そのイベントハンドラで落ちていました。
きちんと見ればよかったのですが...お騒がせしました。

投稿2019/01/21 02:24

makoyang

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

手元で似たようなコードを書いて動かしてみましたが、
そのようなエラーは確認できませんでした。

csharp

1using System; 2using System.Data; 3using System.Windows.Forms; 4 5namespace WindowsFormsApplication2 6{ 7 public partial class Form1 : Form 8 { 9 private DataTable _storeList = null; 10 11 public Form1() 12 { 13 InitializeComponent(); 14 15 _storeList = new DataTable(); 16 17 _storeList.Columns.Add("STORE_CODE", typeof(string)); 18 _storeList.Columns.Add("STORE_NAME", typeof(string)); 19 20 StoreComboBox.DataSource = _storeList; 21 StoreComboBox.DisplayMember = "STORE_NAME"; 22 StoreComboBox.ValueMember = "STORE_CODE"; 23 24 } 25 26 private void button1_Click(object sender, EventArgs e) 27 { 28 _storeList.Rows.Clear(); 29 30 for (int i = 0; i < 10; i++) 31 { 32 DataRow dataRow = _storeList.NewRow(); 33 dataRow["STORE_CODE"] = "ああああ"; 34 dataRow["STORE_NAME"] = "いいいい"; 35 _storeList.Rows.Add(dataRow); 36 } 37 38 _storeList.AcceptChanges(); 39 } 40 } 41} 42

(※実行後ボタン連打しても、そのようなエラーはでません。)

何か足りていないでしょうかね?

投稿2019/01/21 02:18

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makoyang

2019/01/21 02:25

すいません、自己解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問