DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でcomboboxの値を取得

  • 題名: C#でcomboboxの値を取得
  • 著者: アーミー
  • 日時: 2005/12/07 12:42:45
  • ID: 14104
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[C#]
分類:[.NET]

こんにちは。

下記のサンプルについて質問させてください。
http://dobon.net/vb/dotnet/datagrid/datagridcombobox.html

コンボボックスが表示されます。
このコンボボックスに他のテキストボックスから文字を指定してフィルタを掛けようとすると、ValueMemberで指定されている値でフィルタが実行されてしまいます。
そこで上記のテキストボックスで指定した値を元に、ValueMemberで指定されている値を簡単に取ってくることは出来るでしょうか?その他、何かよい方法があるでしょうか?
2005/12/07(Wed) 12:58:14 編集(投稿者)

お世話になります。

■No14104に返信(アーミーさんの記事)
> コンボボックスが表示されます。
> このコンボボックスに他のテキストボックスから文字を指定してフィルタを掛けようとすると、ValueMemberで指定されている値でフィルタが実行されてしまいます。
> そこで上記のテキストボックスで指定した値を元に、ValueMemberで指定されている値を簡単に取ってくることは出来るでしょうか?その他、何かよい方法があるでしょうか?
ちょっと質問の意図を完全に理解しきれていませんが、
「TextBox で指定した値のみ ComboBox に表示させたい」
という事でしょうか?

であれば、ですが...
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=14011&rev=&no=0#13

で、private void button2_Click というメソッドがありますが、
cbc = (Dobon.Samples.Forms.DataGridComboBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[0];
の後に、
DataTable dt = ((DataView)cbc.ComboBox.ComboBox.DataSource).Table;
cbc.ComboBox.DataSource = new DataView(dt, "ValueMember > " + this.textBox1.Text , "", DataViewRowState.CurrentRows);
のような感じで、できないでしょうか。
記述、ありがとうございます。

質問の仕方が悪かったようです。
テキストボックスで指定した文字と一致するdatagridの行だけを表示したいです。
お世話になります。

■No14108に返信(アーミーさんの記事)
> テキストボックスで指定した文字と一致するdatagridの行だけを表示したいです。

そうですか。ではこんな感じでしょうか。

DataTable dt = (DataTable)dataGrid1.DataSource;
DataView dv = new DataView(dt, "Column1> " + this.textBox1.Text , "", DataViewRowState.CurrentRows);
dataGrid1.DataSource = dv;
ありがとうございます。

上記記述を試しました。
内部で持っている値を指定した場合に動作しますが、自分がやりたかったのは表示されている値を指定することです。
今、フィルタを掛けるときにはRowFilterというプロパティにフィルタを掛けたい文字を指定しています。
僕が考えていたやり方はテキストボックスで指定した文字をcomboboxが内部で持っている値に置き換えてからRowFilterに指定するというやり方です。
何かよい方法がありますでしょうか?ご教授ください。
お世話になります。

■No14119に返信(アーミーさんの記事)
# また、取り間違えてるかもしてませんが...
> 表示されている値
→ DisplayMember のこと

> 内部で持っている値
→ ValueMember のこと

という事でしょうか。
textBox に DisplayMember に含まれる値を入力し、
内部では ValueMember でフィルタをかけたい という事であってますか?

であれば、こうでしょうか。
private void button3_Click(object sender, System.EventArgs e)
{
  string textBoxValue = this.textBox1.Text;
  
  if (this.dataGrid1.DataSource is DataTable)
  {
    this.dataGrid1.DataSource = new DataView((DataTable)this.dataGrid1.DataSource);
  }

  Dobon.Samples.Forms.DataGridComboBoxColumn cbc;
  cbc = (Dobon.Samples.Forms.DataGridComboBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[0];
  object o = cbc.ComboBox.FindValueMember(textBoxValue);
  if (o is DBNull)
  {
    // 該当が無い時はフィルタを解除
    ((DataView)this.dataGrid1.DataSource).RowFilter = "";
  }else{
    int paramValue = (int)o;
    ((DataView)this.dataGrid1.DataSource).RowFilter = "Column1 =" + paramValue.ToString();
  }
}
すばらしい。
値が取れています。

たびたびですみませんがもうひとつ質問させてください。
GridColumnStyles[0]は列を指しているようなのですが、TableStyles[0]とは何を指しているんでしょうか?TableStyles[1]、TableStyles[2]などがあるのでしょうか?

cbc = (Dobon.Samples.Forms.DataGridComboBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[0];
お世話になります。

■No14123に返信(アーミーさんの記事)
> たびたびですみませんがもうひとつ質問させてください。
> GridColumnStyles[0]は列を指しているようなのですが、TableStyles[0]とは何を指しているんでしょうか?TableStyles[1]、TableStyles[2]などがあるのでしょうか?
>
> cbc = (Dobon.Samples.Forms.DataGridComboBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[0];

dataGrid.TableStylesは、GridTableStylesCollection 型のオブジェクトが取れます。
【GridTableStylesCollection クラス】
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsgridtablestylescollectionclasstopic.asp

【Item プロパティ】
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsgridtablestylescollectionclasstopic.asp

Collection ですから、Collection の中の該当位置に要素があれば、
TableStyles[1]、TableStyles[2]があると思います。

しかし、今回の例では、Collection に対して 1 個しか Add してませんので
TableStyles[0]しかありません。
TableStyles[1]と指定したら ArgumentOutOfRangeException が発生します。
  • 題名: Re[8]: C#でcomboboxの値を取得
  • 著者: アーミー
  • 日時: 2005/12/08 15:23:42
  • ID: 14130
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
いろいろありがとうございました。
値が取れるようになり、解決しました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板