내 datagridview는 데이터 테이블에 바인딩됩니다. 데이터 테이블에 영향을주지 않고 DataGridview를 필터링하고 싶습니다. 바인딩 방법을 사용하는 것이 하나의 방법이지만 바인딩 소스는 필터에 열 이름을 사용합니다. 그러나 사용자가 필터링 할 텍스트 상자에 문자열을 입력 할 수있게하려고합니다. 그래서 datagridview에서 불필요한 행을 제거하는 함수 PassFilter를 참조하여 datagridview를 전달합니다. DataGridview에서 행 제거를 실행한다는 것을 알 수 있습니다. 그러나 문제는 양식에 datagridview가 표시 될 때 변경되지 않으며 데이터 테이블과 동일하다는 것입니다.vb.net에서 datagridview의 행을 제거 할 수 없습니다.
DataGridView1.DataSource = table
PassFilter(DataGridView1, m_FilterQuick.strFilter.ToLower())
Private Sub PassFilter(ByRef datagridview As DataGridView, ByVal strFilter As String)
Dim i As Integer = 0
Dim j As Integer = 0
Dim containStr As Boolean = False
While i < datagridview.Rows.Count
j = 0
containStr = False
'If all cells in a row does not contain strFilter, delete this row from datagridview
While j < datagridview.Rows(i).Cells.Count
Dim c As DataGridViewCell = datagridview.Rows(i).Cells(j)
If Not c.Value Is DBNull.Value Or Nothing Then
If c.Value.ToString().ToLower().Contains(strFilter) Then
containStr = True
Exit While
End If
End If
j = j + 1
End While
If Not containStr Then
datagridview.Rows.RemoveAt(i)
End If
i = i + 1
End While
End Sub
한 가지 가능한 솔루션은 원치 않는 행이 보이지 않게하는 것입니다. 하지만 datagridview는 데이터 소스에 바인딩되어 있으므로주의해야합니다. 스레드 http://social.msdn.microsoft.com/Forums/en/Vsexpressvcs/thread/606c4ba0-754e-4789-8d7b-7fc428b76ba6 행을 볼 수 없게 만들 수 있습니다. Me.DataGridView.CurrentCell = 아무 것도 없음 Me.DataGridView.Rows (index) .Visible = False – Summer
현재 datagridview가 디자이너를 통해 양식에 추가되었으므로 새 datagridview에 던져 넣을 수 없습니다. 또한 값으로 전달하면 분명히 작동하지 않습니다 – Summer
visible 속성을 false로 설정하는 문제는 매우 느립니다 !!! – Summer