3

次のコードを使用して、一連のDataGridViewRow要素を非表示に設定しています。私が使用しているルールは、関連付けられたデータソースでブール フラグをチェックすることです。フラグが true の場合、行が表示されます。そうでない場合は、非表示になります。

次のコードは機能します。ただし、これにはかなりの時間がかかります。

CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView.DataSource];

currencyManager.SuspendBinding();

foreach (DataGridViewRow row in dataGridView.Rows)
{
    if (!objectList.list[row.Index].Selected)
    {
        row.Visible = false;
    }
}
currencyManager.ResumeBinding();

誰かがより良い解決策を持っていますか? 通過しなければならないオブジェクトのリストが長くなればなるほど、当然、このプロセスにかかる時間も長くなります。ブール値が連続していない可能性があるため、セルの範囲を設定できません。

4

1 に答える 1

1

PraVnが言ったように、datagridviewを使用する前に単純にフィルタリングすることができます。DataSet、DataTable、またはDataViewを使用している場合は、次のようにします。

DataSet ds = new DataSet();
ds.Tables[0].DefaultView.RowFilter = "YourBooleanColumn = 1";

DataView dv = new DataView();
dv.RowFilter = "YourBooleanColumn = 1";

DataTable dt = new DataTable();
dt.RowFilter.DefaultView.RowFilter = "YourBooleanColumn = 1";

または、データベースの最後でフィルタリングすることもできます(ある場合)。データソースをお知らせください。必要に応じて更新します。これが私にできる最高のことです!

于 2012-03-13T02:22:54.827 に答える