none
DataGridViewで「列の表示/非表示の切り替え」と「レコード抽出」の不整合を解消したい RRS feed

  • 質問

  • お早うございます,zen73です。”経費帳”をFormに表示しようとしていますが,「列の表示/非表示の切り替え」と「レコード抽出」を同時にしようとすると, 

       操作前のDataGridViewと操作後のDataGridViewが二重に重なって表示されてしまう

    という不具合が生じておりますがその原因を特定できず困っています。

     

        private void button1_Click(object sender, EventArgs e)
            {
                suitoDataGridView.Columns[ 7].Visible = false;
                suitoDataGridView.Columns[ 8].Visible = true;
            }

    で,列の表示/非表示の切り替えができていますが,このとき,

        private void button1_Click(object sender, EventArgs e)
            {
                suitoDataGridView.Columns[ 7].Visible = false;
                suitoDataGridView.Columns[ 8].Visible = true;
                dvKeihi.RowFilter = string.Format("大科目='{0}'", "総務部");
                //dvKeihi.RowFilter = string.Format("大科目='{0}'", "福祉部");
                suitoDataGridView.DataSource = dvKeihi;
            }

    とすると,操作前のDataGridViewと操作後のDataGridViewが二重に重なって表示されてしまいます。

    このとき,私にはまったく理解できないのですが,

        //dvKeihi.RowFilter = string.Format("大科目='{0}'", "福祉部");
    としたときには,二重に表示されることはありません。(福祉部のレコードは1件のみですが,他にもレコードが1件しかない大科目がありますが,この現象は福祉部に限られています)

     

    実際の場面はcomboBoxで選択されたアイテムによって表示を切り替えています。

        

    コード ブロック

    private void comboBox1_SelectedIndexChanged

                                         (object sender, EventArgs e)
    {
        choiceIndex = comboBox1.SelectedIndex + 1;
        //入金or出金
        if (choiceIndex > frmMain.inNum)
        {
            suitoDataGridView.Columns[7].Visible = false;
            suitoDataGridView.Columns[8].Visible = true;
        }
        else
        {
            suitoDataGridView.Columns[7].Visible = true;
            suitoDataGridView.Columns[8].Visible = false;
        }
        string strItem;
        int MaxStrLen = 0;
        if (frmMain.midCnum[choiceIndex] != 0)
        {
            comboBox2.Items.Clear();
            for (int i = 1; i <= frmMain.midCnum[choiceIndex]; i++)
            {
                strItem = frmMain.Komoku[choiceIndex, i];
                comboBox2.Items.Add(strItem);
                if (strItem.Length > MaxStrLen)
                    MaxStrLen = strItem.Length;
            }
            comboBox2.Text = "小科目";
            comboBox2.Width = 31 + 15 * MaxStrLen;
            comboBox2.Enabled = true;
            comboBox2.Refresh();
        }
        else
        {
            comboBox2.Enabled = false;
        }

        dvKeihi.RowFilter = string.Format

                  ("大科目='{0}'",comboBox1.SelectedItem.ToString());
        suitoDataGridView.DataSource = dvKeihi;
    }

     

    private void comboBox2_SelectedIndexChanged

                                         (object sender, EventArgs e)
    {
        string a = comboBox1.SelectedItem.ToString();
        string b = comboBox2.SelectedItem.ToString();
        dvKeihi.RowFilter = string.Format

                            ("大科目='{0}' AND 小科目='{1}' ", a, b);
        suitoDataGridView.DataSource = dvKeihi;
    }

     

     

     

    2007年10月21日 20:34

回答

  •  zen73 さんからの引用

    操作前のDataGridViewと操作後のDataGridViewが二重に重なって表示されてしまいます。

     

    二重に重なって表示されるというのがよくわからないのですが、DataGridViewに本来1件のはずが2件表示されるということでしょうか? もし、そうであれば、テーブルの結合によってそう表示されているだけではないでしょうか?

     (例)

    総務部    なんとか

    総務部    かんとか

    で、表示部分は総務部のみなので、総務部が2件表示されているように見える。

    2007年10月22日 0:47
    モデレータ

すべての返信

  •  zen73 さんからの引用

    操作前のDataGridViewと操作後のDataGridViewが二重に重なって表示されてしまいます。

     

    二重に重なって表示されるというのがよくわからないのですが、DataGridViewに本来1件のはずが2件表示されるということでしょうか? もし、そうであれば、テーブルの結合によってそう表示されているだけではないでしょうか?

     (例)

    総務部    なんとか

    総務部    かんとか

    で、表示部分は総務部のみなので、総務部が2件表示されているように見える。

    2007年10月22日 0:47
    モデレータ
  • 二重になって見えるのは,抽出したレコードを表示したときに抽出する前に表示されていたDatagridViewの’画像’がそのまま残り,その上に幅を変更した抽出後のDataGridViewの’画像’が重なって見えることでした。

    抽出後のDataGridViewの表示をいろいろと設定しているのですが。そこにバグがみつかりそれを修正したところ不具合が解消されました。ありがとうございました。

     

    2007年10月22日 8:30