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

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

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

Re[2]: ListBoxでのデータセットの扱いについて


(過去ログ 61 を表示中)

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

■35405 / inTopicNo.1)  ListBoxでのデータセットの扱いについて
  
□投稿者/ たに (6回)-(2009/04/28(Tue) 18:40:53)

分類:[C#] 

お世話になります。
ListBoxにDBから取得したテーブルの内容をリスト形式で
選択させようと思っています。

LBox = リストボックス
DataSet = データセット
(M_DataTableと言うテーブルがありDBからはデータ取得済。
リスト項目として表示したい列はFieldName_1列です。)

(1)
LBox.DataSource = DataSet.M_DataTable;
LBox.DisplayMember = DataSet.M_DataTable.FieldName_1.ToString();

(2)
foreach (DataSet.M_DataTableRow row in DataSet.M_DataTable.Rows)
{
    LBox.Items.Add(row[DataSet.M_DataTable.FieldName_1Column.ColumnName].ToString());
}

リストにセット後、GraphicsクラスのMeasureString()を使って
項目の各文字列長を取得し、最大サイズのものに合わせてリストの
幅を変更するようにしています。

現在"AA"、"BB"と言った半角英字2文字の項目を表示しているのですが、
(1)の場合と(2)の場合でMeasureString()で取得出来る文字列長さに
違いがあり、(1)の方が倍以上長いのです。
原因がさっぱりわからないのですが、どなたか回答頂けませんでしょうか?

環境はWinXP/VS2005/C#/.net2.0です。

引用返信 編集キー/
■35409 / inTopicNo.2)  Re[1]: ListBoxでのデータセットの扱いについて
□投稿者/ Hongliang (374回)-(2009/04/28(Tue) 19:53:23)
MeasureString に渡す文字列が違ってる気がします。
ListBox の GetItemText で取得してますか?
引用返信 編集キー/
■35436 / inTopicNo.3)  Re[2]: ListBoxでのデータセットの扱いについて
□投稿者/ たに (8回)-(2009/04/30(Thu) 10:05:06)
回答ありがとうございます。
お返事遅くなりました。

■No35409 (Hongliang さん) に返信
> MeasureString に渡す文字列が違ってる気がします。
> ListBox の GetItemText で取得してますか?

その通りでした。ただ文字列を渡すだけでは駄目なのですね。
最初は(1)でやっていて、ご指摘の通り(2)にしたらOKでした。

for (int i = 0; i < LBox.Items.Count; i++ )
{
------------------------------------------------------------
(1) strSize = graph.MeasureString(LBox.Items[i].ToString(),    // ×
                                  LBox.Font);
------------------------------------------------------------
(2) strSize = graph.MeasureString(LBox.GetItemText(LBox.Items[i]),    // ○
                                  LBox.Font);
------------------------------------------------------------
    if (strMaxSize.Width < strSize.Width)
    {
        // リスト内で最大の文字列長を持つ
        // 項目の幅を取得する。
        strMaxSize = strSize;
    }
}

MSDNでGetItemTextを確認したらこのように書いてありました。

<<以下引用>>
戻り値
DisplayMember プロパティを指定しない場合は、GetItemText の戻り値が項目の ToString メソッドの値になります。
それ以外の場合、このメソッドは item パラメータで指定されたオブジェクトの DisplayMember プロパティに指定
されているメンバの文字列値を返します。 
<<引用ここまで>>

しかし、MeasureStringに渡している文字列は同じだったのですが・・・
DisplayMemberに値を設定しているか否かで得られる文字列に
何か違いがあるのでしょうか・・・。

希望の動作が出来ましたので解決とさせて頂きます。
ありがとうございましたm(__)m

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -