- PR -

拡張ComboBoxの拡張

1
投稿者投稿内容
もも
常連さん
会議室デビュー日: 2005/07/25
投稿数: 46
投稿日時: 2008-01-16 11:56
とても久しぶりにお世話になります。

msdnにある拡張コンボボックスを拡張したいと考えております。

環境は、
visual studio 2005 C# windowsアプリケーション  です。

拡張内容は、DataSourceプロパティを使用し、データ連結で表示させる方法です。
DataSourceプロパティに設定されるオブジェクトは、DataTable、List<T>など
自由に設定し、表示項目、値については、「DisplayMember」、「ValueMember」
で指定します。
そこで、
msdnから引用-------------------------------------------------------
//各項目を反復処理して
//DisplayMember 文字列の最大幅を測定します
foreach(object item in this.Items)
{
maxWidth = Math.Max(maxWidth, ds.MeasureString(item.ToString(), this.Font).Width);
}
-------------------------------------------------------------------
この部分の変更が必要だと思うのですが。

--------------------------------------------------------------------
// 表示文字列の最大幅を取得
foreach (object item in this.Items) {
Type t = item.GetType();
string str = (string)t.InvokeMember(this.DisplayMember,
BindingFlags.GetProperty,
null,
item,
null);

if (string.IsNullOrEmpty(str)) {
str = string.Empty;
}

maxWidth = Math.Max(maxWidth, ds.MeasureString(str, this.Font).Width);
}
--------------------------------------------------------------------
このように変更したところ、DataSourceプロパティがList<T>のような場合は
うまくいくのですが、DataTableで連結させた場合、itemの型がDataRowViewと
なるため、this.DisplayMemberで指定したプロパティが存在せず、エラーとな
ってしまいます。

この処理は、DisplayMember、ValueMember、DataSource各プロパティに
値を設定後行っております。

DataSourceプロパティの型を意識せずに、コンボボックスの表示項目の値
を取得することは可能なのでしょうか。

よろしくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-01-16 12:25
引用:
msdnにある拡張コンボボックスを拡張したいと考えております。


URL を張っていただけると一手間減って助かります。

で質問ですが、GetItemText メソッドをどうぞ。
もも
常連さん
会議室デビュー日: 2005/07/25
投稿数: 46
投稿日時: 2008-01-16 12:42
Hongliang様 返信頂きましてありがとうございました。

コンボボックスの表示値を取得することができました。
本当に、ありがとうございました。

引用:

URL を張っていただけると一手間減って助かります。



申し訳ありません。
次回から気をつけます・・・・・
1

スキルアップ/キャリアアップ(JOB@IT)