重複の可能性:
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);
}
}
誰でもこの動作を説明できますか? 解決策はありますか?