トップ回答者
DataGridViewで「列の表示/非表示の切り替え」と「レコード抽出」の不整合を解消したい

質問
-
お早うございます,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;
}