プロが教えるわが家の防犯対策術!

DataFridViewで行を一括ですべて非表示にする方法を教えてください。
また、より良い方法がありましたら、教えてください。

<プログラムの概要>
VS2012C#のDataFridViewを使って年表を作ろうと思っています。
行数が多いため、10年ごとに区切って表示し、ボタンをクリックすると1年ごとのレ
コードが表示されるようにしようとしています。
例)
--------------
 |+ |1900年|○○|
 |+ |1910年|○○|
 |+ |1920年|○○|
 |+ |1930年|○○|
--------------
↓1910年の[+]をクリックしたら
--------------
 |+ |1900年|○○|
 |- |1910年|○○|
 | |1911年|○○|
:
 | |1919年|○○|
 |+ |1920年|○○|
 |+ |1930年|○○|
--------------

<困っている点>
下記に記載したようなプログラムを組んでおりますが、非表示にする処理に時間がか
かり起動が遅くなっています。
そこで、「すべての行を一括で非表示にしてから、必要な行のみを表示」に変更する
ことで処理が速くなるのではないかと考えています。
 ※必要な行を非表示にする場合:10行中9行を処理
  必要な行を表示にする場合:10行中1行を処理 ←処理件数が減るため早くなる
のではないかと予想
すべての行を非表示にする方法として以下のよう点を調べましたが見つけられません
でした。
・行のデフォルトスタイルとして非表示にする
・表に非表示の行を追加する
・行の追加後、複数の行を一括で非表示にする

<現在作成したプログラム>
private void SET_DGV()
{
intYear = new int[intArraySize];
dgvMain.Rows.Add(intArraySize);
for (a = 0; a < intArraySize; a++)
{
intYear[a] = intYearMin+a;
if (intYear [a] % 10 == 0)
{
}
else
{
dgvMain.Rows[a].Visible = false;
}
}
}
※intYearMin ← 年表の初めの年
 intArraySize ← 年表の年数・行数

A 回答 (1件)

う~ん……


DataTableを作成してDataGridViewのDataSourceに設定、非表示の列を1つ追加しておいて
その列に対してDataTable.Select()で表示対象をSQLで取り出す。
とした方がいいんじゃないでしょうかね?

「+」のセルがクリックされたら、元のDataTableのRowにあたる位置を算出、非表示列で表示対象をSQLで取り出せるようにColumnを書き換えでRowを更新していって、
最後にDataTable.Select()で表示対象をSQLで取り出す。
取り出したDataTableを改めてDataGridViewのDataSourceに設定して、CurrentCellやら調整して……

うん、面倒ですな…。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます
処理が早くなりました
スクロールやフォントの設定を色々試してみます

お礼日時:2017/02/10 12:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!