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

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

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

Re[2]: ListViewItemのAddRangeでNULL参照


(過去ログ 30 を表示中)

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

■14530 / inTopicNo.1)  ListViewItemのAddRangeでNULL参照
  
□投稿者/ asuka (40回)-(2008/02/21(Thu) 10:53:34)

分類:[C#] 

お世話になっております。



ListViewItem[] lv = new ListViewItem[1024];

としてリストビュー配列を作成し、データベースに存在する1024行以下のテーブルからデータを取得しております。
(カラム数4のリストビュー)

データは取得出来ているようなのですが(自作のデバッグウインドウで確認)、下記のように追加しますと以下のエラーがcatchされてしまいます。

// 追加
listView.Items.AddRange(lv);

→エラー
オブジェクト参照がオブジェクトインスタンスに設定されていません。



色々と調べてみますと、nullの参照をしているのが問題のようです。

データベースのテーブルには試験用に4行分のデータしか入れておりません。

試しにlv.Lengthの値を見てみますと1024となり、

ListViewItem[] lv = new ListViewItem[1024];

として作成された分の個数が表示されるのですが、データの入っていない1020個分がnullのようです。

このデータの入っていないnullの分を削除するにはどのようにすれば良いでしょか?



そもそも前任がVS2003で作成したときには

listView.Items.AddRange(lv);

で問題なかったらしいのですが、VS2005でコンパイルしてみるとコンパイルは通るもののリストビューに反映されずにプログラムが落ちます。

AddRangeの仕様そのものはとくに変わっている様子はないのですが、データの入っていない箇所を削除すれば解決出来るのかな?

と思っており、その方法を御教授願えればと思っております。



#ArryListを使ってリストビューに追加してみたいのですが、どのようにやるか分からない次第です。

引用返信 編集キー/
■14531 / inTopicNo.2)  Re[1]: ListViewItemのAddRangeでNULL参照
□投稿者/ επιστημη (833回)-(2008/02/21(Thu) 11:01:38)
επιστημη さんの Web サイト
ListViewItem[] lv = new ListViewItem[1024];
...
// N個分のコピーをこさえて
ListViewItem[] toCopy = new ListViewItem[N];
lv.CopyTo(toCopy,0,N);
// ListViewに突っ込む
listView.Items.AddRange(toCopy);

引用返信 編集キー/
■14532 / inTopicNo.3)  Re[1]: ListViewItemのAddRangeでNULL参照
□投稿者/ 魔界の仮面弁士 (641回)-(2008/02/21(Thu) 11:02:25)
No14530 (asuka さん) に返信
> ListViewItem[] lv = new ListViewItem[1024];
1024行未満になる可能性があるならば、
 List<ListViewItem> lv = new List<ListViewItem>();
にしておいた方が良いかも知れません。

> listView1.Items.AddRange(lv);
listView1.Items.AddRange(Array.FindAll(lv, delegate(ListViewItem o) { return o != null; } ));
引用返信 編集キー/
■14533 / inTopicNo.4)  Re[1]: ListViewItemのAddRangeでNULL参照
□投稿者/ Hongliang (241回)-(2008/02/21(Thu) 11:02:57)
初めからは配列を用意するんじゃなく、List<ListViewItem> に Add してって ListView に AddRange するときに ToArray するとかどうでしょう。
引用返信 編集キー/
■14534 / inTopicNo.5)  Re[1]: ListViewItemのAddRangeでNULL参照
□投稿者/ まどか (449回)-(2008/02/21(Thu) 11:03:58)
データの件数があらかじめわかるのであれば、ListViewItem[件数-1]でいけますね。
わからないとなると動的に要素数を変動するしかないのではと思います。
読むたびに増やすか、最後に削るか。
いずれにしてもArra.ResizeなどArray.〜を見てみるとよいかも。
引用返信 編集キー/
■14535 / inTopicNo.6)  Re[2]: ListViewItemのAddRangeでNULL参照
□投稿者/ まどか (450回)-(2008/02/21(Thu) 11:05:52)
No14532 (魔界の仮面弁士 さん) に返信
> listView1.Items.AddRange(Array.FindAll(lv, delegate(ListViewItem o) { return o != null; } ));

いいなぁ、C#は。一行か。
引用返信 編集キー/
■14538 / inTopicNo.7)  Re[2]: ListViewItemのAddRangeでNULL参照
□投稿者/ asuka (41回)-(2008/02/21(Thu) 12:03:21)
たくさんのレスありがとうございます。m(__)m

コピーするか、Listを使うかといった他に、Array.FindAllなんて素晴らしいメソッドが用意されていたのですね。

おかげ様で解決しました。

VS2003でコンパイルしたものが何故落ちなかったのかは疑問ですが、様々な手法を教えて頂きありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -