표시 한 두 가지 방법 모두 부울 열에 RowFilter
으로 작동합니다.
DataGridView
이 편집을 처리하는 방법으로 문제가 발생할 가능성이 높습니다. 현재 편집 셀에 포커스가 없거나 컨텍스트 메뉴를 표시하는 가장 일반적인 방법이있을 때까지 기본 데이터 소스에 커밋되지 않습니다. 그리드에서 셀이 포커스를 잃지 않습니다.
void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show(dataGridView1, e.Location);
}
}
그런 다음 변경 한 가장 최근의 체크 박스는 데이터보기에 그것의 변화를 플러시하지 않습니다 : 당신이 당신의 상황에 맞는 메뉴는 다음과 같이 일을 보여 주면
, 즉.
이 솔루션은 두 부분으로 나뉩니다. 먼저 데이터보기와 DataGrid 사이에있는 바인딩 소스를 도입해야합니다.
bindingSource1.DataSource = dView;
dataGridView1.DataSource = bindingSource1;
는 그런 다음 데이터 그리드 뷰에 'CurrentCellDirtyStateChanged'처리기에 다음 코드를 추가해야합니다
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
마지막으로 필터를 적용 코드 내에도 EndEdit
를 호출해야 내 이전 경험에서
private void filterToolStripMenuItem_Click(object sender, EventArgs e)
{
bs.EndEdit();
dvSections.RowFilter = "CheckBoxCol";
}
일 : 바인딩 소스에 전자 바인딩 소스가 필요하지는 않지만 컨텍스트 메뉴와 데이터보기가 꽤 혼합 된 상태에서 시도하지 않았습니다. 시도했을 때 bs.EndEdit()
이 필요하다는 것을 알았습니다. 데이터 그리드보기의 기본 소스 테이블의 경우에
해보십시오 Table.AcceptChanges을 -
에 (예 : 데이터 테이블, 오브젝트의 목록으로) 당신의 dataviewcontrol에 대한 기본 바인딩 데이터 소스가 아니면 수동으로 데이터 그리드를 채우기있다 ? –
표시되는 옵션이 모두 잘 작동해야합니다.이 문제가 발생할 수 있다고 생각하는 유일한 이유에 따라 답변을 제공했습니다. 제 추측이 잘못 되었다면이 문제를 재현하는 방법에 대한 자세한 정보를 제공해주십시오. 최소한의 해결책이면에있는 코드가 가장 좋습니다. –