1

重複の可能性:
DataGridViewCheckBoxCell フォームの読み込み中に設定されたときにチェック済みを表示する方法

C#-WinForms プロジェクトの DataGridView に問題があります。

ローカル データベースのデータを入力します。さらに、どのデータにもバインドされていない CheckBoxColumn を追加しました。これを使用して、チェックされた行に応じて ListBox をフィルタリングします。すべてがダイアログ フォームの TabControl の 2 ページ目に配置され、完全に機能しています。

ここで、フォームを開くときに通過する文字列のリストに基づいて、プログラムで行を選択したいと考えています。私はこのコードを試しました:

foreach (string pre in preselect)
{
    foreach (DataGridViewRow row in dgvProtFunc.Rows)
    {
        if ((string)row.Cells[2].Value == pre)
        {
            ((DataGridViewCheckBoxCell)row.Cells[0]).Value = true;
        }
    }
}

値を設定すると、トリガーされたフィルタリングがフォームロードで機能します。ただし、チェックボックスはチェックされていません。1 つをチェックすると、他のすべての値が失われます。そのような事前選択を使用する必要があるため、それは悪いことです。これらは、他の DataGridView イベント ハンドラーです。

private void dgvProtFunc_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgvProtFunc.IsCurrentCellDirty)
    {
        dgvProtFunc.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

private void dgvProtFunc_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (!FormLoadCheck)
    {
        string data = string.Empty;
        ptSelectList.Clear();
        foreach (DataGridViewRow row in dgvProtFunc.Rows)
        {
           if (row.Cells[0].Value != null && Convert.ToBoolean(row.Cells[0].Value) == true)
           {
               ptSelectList.Add(Convert.ToInt32(row.Cells[1].Value));
           }
           data += row.Cells[0].Value;
        }
        ptSelectList.Sort();
        FilterRelais(ptSelectList.ToArray());
        MessageBox.Show(data);
   }
}

誰でもこの動作を説明できますか? 解決策はありますか?

4

0 に答える 0