- PR -

ListBoxコントロールのDisplayMemberプロパティについて

1
投稿者投稿内容
奈良漬け
会議室デビュー日: 2004/09/24
投稿数: 3
投稿日時: 2005-06-06 15:31
お世話になります。
いつも拝見させて頂いております。

当方,VC++.NET2003にて,ListBoxコントロールのDataSourceプロパティに
DataSetオブジェクトをセットしたいのですが,
ListBox上の表示が『System.Data.DataRowView』となってしまい困っています。

ListBoxのDisplayMemberプロパティを設定すれば,意図した表示になるのですが
データソースに行追加を行なうと,再び表示が『System.Data.DataRowView』に
戻ってしまいます。
現在,取り敢えず,DataTableにDataRowChangeEventHandlerを追加して
データソースが変更されるたびに,イベントハンドラで

ListBoxA->DisplayMember = S"Message";

を実行して,ごまかしている状況です。

以下にコードを示します。

---------------------------------------------------------
[...省略]

// データソースの設定
DataSet * dsMSG = new DataSet (S"DataSetName");
DataTable * dt = dsMSG->get_Tables()->Add (S"TableName");
DataColumn * dc = dt->get_Columns()->Add (S"Message");
dc->set_DataType (System::Type::GetType (S"System.String"));

ListBox->set_DataSource (dsMSG->get_Tables()->get_Item(0));
ListBox->set_DisplayMember (S"Message");

[...省略]

// データ追加部分
String * strMSG = S"message content";
DataRow * dr = dsMSG->get_Tables()->get_Item(0)->NewRow();
dr->set_Item (S"Message", strMSG);

dsMSG->get_Tables()->get_Item(0)->get_Rows()->Add (dr);

//この後にListBox->set_DisplayMember (S"Message")をしないと
//意図した表示にならない?

---------------------------------------------------------

データソースを編集する度に,表示側のプロパティを設定し直すというのが
気持ち悪いので何とかしたいのですが,マニュアルを見ても要領を得ず,
投稿させていただきました。
どなたかご存知でしたら御教授ください。
よろしくお願いいたします。
奈良漬け
会議室デビュー日: 2004/09/24
投稿数: 3
投稿日時: 2005-12-14 09:46
間があきましたが自己レスです。

ListBoxのSelectionModeプロパティをNoneに設定していると,
上述の事象が再現できるようです。
ただ,SelectionModeをOneなどに設定すると,選択行がハイライト表示されてしまいます。

ハイライト表示はしたくない場合,やはり上述のとおり
・SelectionMode=None
・テーブルにDataRowChangeEventHandlerを追加
・ハンドラ内でDisplayMemberを毎回セット

とするしかないのでしょうか?


[ メッセージ編集済み 編集者: 奈良漬け 編集日時 2005-12-14 09:47 ]
1

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