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

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

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

Re[1]: ListBoxのリフレッシュ


(過去ログ 23 を表示中)

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

■10329 / inTopicNo.1)  ListBoxのリフレッシュ
  
□投稿者/ みこ (19回)-(2007/11/15(Thu) 19:02:48)

分類:[.NET 全般] 

いつも教えていただきありがとうございます。
C# VS2005 Access2007(mdb) WindowsXP で開発しています。

ComboBoxで分類を絞り込み、それをListBoxに表示しています

その上の条件で絞り込む対象のテーブルが異なります。
以下のようにコード(抜粋)を書いておりますが、flgがfalseの条件のときは、ComboBoxを選択するたびに正常にListBoxの表示が切り替わります。
ですが、flgがtrueの条件のときは切り替わらず非表示(実際は、Listには確保されているようですがtextが表示されない)となります。
dataSetからArrayListにいったん取り込みListBoxに表示させている処理部分は同じで、異なるのはselectの対象だけです。

true条件のときにも正常に表示させたいのですが、ListBox。Items.Clear()では表示がクリアされるだけなのでしょうか?(調べても、アイテムを全削除としか理解できない記述しかありません)
true条件のときにもListBoxにAddRengeされる件数が正しいところまでは確認できています。
表示だけがされないのです(と思っています)
正しく表示するにはどうしたらいいでしょうか?
初歩的な質問かもしれませんが、よろしくお願いいたします。

if (flg == false)
{
odaMed.SelectCommand.CommandText
= "select * from TBL_Med where TBL_Med.BunruiCode1 = '" + cmbBunrui.SelectedValue + "'";
dsMed.Clear();
odaMed.Fill(dsMed, "TBL_Med");
this.listBox1.Items.Clear();

int cnt = dsMed.Tables["TBL_Med"].Rows.Count;
if (cnt != 0)
{
allList1.Clear();
for (int i = 0; i < cnt; i++)
{
allList1.Add(new DictionaryEntry(dsMed.Tables["TBL_Med"].Rows[i]["Code"],
dsMed.Tables["TBL_Med"].Rows[i]["Name"]));
}
// listbox1に1件ずつ追加
this.listBox1.Items.AddRange(allList1.ToArray());
}

}
else
{
// 個別データがある場合はtmpから取り込み
odaMed.SelectCommand.CommandText
= "select * from (tmp inner join TBL_Med on tmp.Code = TBL_Med.Code )"
+ " where TBL_Med.BunruiCode1 = '" + cmbBunrui.SelectedValue + "'";
dsMed.Clear();
odaMed.Fill(dsMed, "TBL_Med");
this.listBox1.Items.Clear();

int cnt = dsMedi.Tables["TBL_Med"].Rows.Count;
if (cnt != 0)
{
allList1.Clear();
for (int i = 0; i < dsMed.Tables["TBL_Med"].Rows.Count; i++)
{
allList1.Add(new DictionaryEntry(dsMed.Tables["TBL_Med"].Rows[i]["Code"],
dsMed.Tables["TBL_Med"].Rows[i]["Name"]));
}
// listbox1に追加
this.listBox1.Items.AddRange(allList1.ToArray());
}
listBox1.Refresh();
}


引用返信 編集キー/
■10332 / inTopicNo.2)  Re[1]: ListBoxのリフレッシュ
□投稿者/ Jitta on the way (37回)-(2007/11/15(Thu) 19:30:57)
No10329 (みこ さん) に返信

携帯からなのできちんと見ていません

ArrayList に放り込むところだけ、分けてみてはどうですか?
引用返信 編集キー/
■10335 / inTopicNo.3)  Re[2]: ListBoxのリフレッシュ
□投稿者/ ぽぴ王子 (291回)-(2007/11/15(Thu) 19:42:10)
ぽぴ王子 さんの Web サイト
うーん、とりあえず抜粋じゃなく状況判断可能なコードを出していただきたく。
いわゆるミニマムコードってやつです。

回答者が調べてみるにしても、わざわざ mdb のテーブルを用意したり、読み込む処理を
作ったりっていうとチョ→面倒じゃないッスかー(その言葉遣いは止めなさい)。
なので、もう少し絞り込んだものを用意していただけるとありがたいなと。
例えば mdb から読んでいるのが原因でなければ、DataTable を作ってそこにデータを
ぶっこんでリストに表示させるコード(そのままコピペして再現可能)を用意するとか。

それこそ true 条件と false 条件の違いなんて回答者としてはどうでもいいというか
問題は両者の違いなわけで、いろんな不要な部分を全部さっぴいて「これを実行する
とこういう違いが出るんだけど、どうよ?」とわかるようなやつを作るまでが、質問者
としてやってほしいところ。
そこまでやるのが義務とかいうんじゃないけど、そこまで自分でやってみるうちに
「あ、ここが違うやんけ!」と質問するまでもなく間違いに気づくかもしれないし
そういう場数を踏んだほうが自己の成長にもつながるんじゃないかニャーと思ったり
するわけです。そして回答者もわかりやすい情報を手に入れることができて、すぐさま
回答可能になるわけで、両者にとってオヌヌメ。


とまぁそんなことはどうでもいいとして(いいのかよ)。

パッと眺めてみたところで気になったのが2点ほど。

・ true 条件の時だけ listBox1.Refresh(); してるけど、ここ関係ある?
・ そもそも allList1 の型ってなに?ArrayList?

必要な情報がちょっと足りない&余計な情報が多いので、すぐさま回答は難しいけど
ちょっと整理して教えていただけるとありがたいです。

引用返信 編集キー/
■10341 / inTopicNo.4)  Re[1]: ListBoxのリフレッシュ
□投稿者/ みこ (20回)-(2007/11/15(Thu) 20:53:12)
ありがとうございます。

絞り込んで返答を書いているうちに自己解決できました。

結論としては、Selectしている対象のテーブルが異なるところにしか原因を見いだせず再度テーブルを直接確認したところ、テーブルの内容が壊れており表示データが取得できていないという問題でした。

今後質問をする時にはちゃんと状況を整理し絞り込んで質問したいと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -