none
ComboBox の動きを MenuStrip で再現させるには RRS feed

  • 質問

  • ComboBox で出来る事を MenuStrip に置き換えて、その仕組みを知ろうとして
    いますが、MenuStrip でどうやればよいのか混迷しています。やっている作業
    は以下の通りです。


    ひらがな 50 音を用意しました。
    "あ行" や "か行" などの "column" を ComboBox で選択すると、
    選択した行に含まれる "あいうえお" や "かきくけこ" などのひらがなが
    DataGridView のセルに1つずつ表示されるようにしています。

     

    コード ブロック

    [columns]
    ----
    id   int         not null <------+
    name varchar(50) not null        |
    ----                             |
                                     |
    [chars]                          |
    ----                             |
    id        int         not null   |
    column_id int         not null --+
    name      varchar(50) not null
    ----
    ※ columns.id と chars.column_id は紐付けしています。

     

    コード ブロック

    [columns]
    ---------
    id  name
    ---------
     1  あ行
     2  か行
     3  さ行
     .
     .
     .
    10  わ行
    ---------

     

    [chars]
    --------------------
    id  column_id  name
    --------------------
     1  1          あ
     2  1          い
     3  1          う
     .
     .
     .
    44  10         わ
    --------------------

     


    デザイナを使うと

     

    コード ブロック

    //
    // charsBindingSource
    //
    this.charsBindingSource.DataMember = "FK_chars_columns";
    this.charsBindingSource.DataSource = this.columnsBindingSource;

     

     

    のようなリレーション絡みの処理を施してくれるようですが、
    MenuStrip で同じようにできないかやっています。

     

    MenuStrip の DropDownItem がクリックされた時、
    選択された値を調べ、
    その値により column_id を求めるという以下の流れを作ってみました。

     

    コード ブロック

    private void 行ToolStripDropDownItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
      string ch = e.ClickedItem.Text;
      int column_id = 0;

     

      switch (ch)
      {
        case "あ": column_id = 1; break;
        case "か": column_id = 2; break;
        case "さ": column_id = 3; break;
        case "た": column_id = 4; break;
        case "な": column_id = 5; break;
        case "は": column_id = 6; break;
        case "ま": column_id = 7; break;
        case "や": column_id = 8; break;
        case "ら": column_id = 9; break;
        case "わ": column_id = 10; break;
      }

     

      // ここから先が分からない.....???
    }

     

    このやり方の場合、column_id を求めた後、どうやれば DataGridView に各行
    の文字を列挙できるのか分かりません。

     

    コード ブロック

    this.charsBindingSource.Filter = "column_id = " + column_id;

     

    とやってみましたが、何も表示されなくなってしまいました。

     

    理解できる方、お教え願えませんでしょうか。


    環境
    Visual C# 2005 Express Edition SP1
    SQL Server 2005 Express Edition

    2007年12月9日 3:31

回答

  • 自己解決。

     

    同 Form 内に ComboBox も残していたので、それが悪さをしていたようです。

    消したら思惑通りの動きになりました。

     

    おしまい。

    2007年12月9日 15:18