2010-12-17 6 views
0

그래서 vb.net에서 datagridview의 결과를 필터링하는 데 사용할 클래스가 있습니다. 그리고이 클래스에서해야 할 일 중 하나는 열 순서, 너비 및 가시성을 유지하는 것입니다.DataGridview에서 표시 인덱스를 복원 할 수 없습니다.

내 검색 클래스가 인스턴스화되면 나중에 참조 할 수 있도록 해시 테이블에 열의 복사본을 만듭니다.

Private dgv As DataGridView 
Private dataSet As DataSet 
Private bindingSource As New BindingSource 

Dim ht As New Hashtable() 

Public Sub new(ByRef dgv As DataGridView, ByVal dataSet As dataset) 

    Me.dgv = dgv 
    Me.dataSet = dataSet 

    For Each col As DataGridViewColumn In dgv.Columns 
     ht.Add(col.headertext, col) 
    Next 

End Sub 

그럼, ...과 같이

Public Sub quickFilter(ByVal searchterm As string, ByVal tablename As String, optional ByVal colname As string = Nothing) 

    dgv.DataSource = dataSet 
    dgv.DataMember = tablename 

    bindingSource.DataSource = CType(dgv.DataSource, DataSet).Tables.Item(tablename) 

    bindingSource.Filter = determineColumnsFilter(searchterm, colname) 

    dgv.DataSource = bindingSource.DataSource 

    restoreCols() 

End Sub 

혼란스러운 부분 복원 COLS 기능이 제대로 폭 및 가시성을 복원 아니지만 디스플레이 인덱스를 필터링. 그것은 어떤 방식 으로든 주위에 기둥을 섞는 것처럼 보입니다.

Private Sub restoreCols() 

    For Each col As DataGridViewColumn In dgv.Columns 

     Dim colcopy As DataGridViewColumn = ht(col.headertext) 

     col.Width = colcopy.Width 
     col.Visible = colcopy.Visible 
     col.DisplayIndex = colcopy.DisplayIndex 

    Next 

End Sub 

디스플레이 색인이 제대로 복원되지 않는 이유는 무엇입니까?

감사

답변

0

나는 작품 주위에 표시 인덱스를 저장하는 두 번째 해시 테이블을하는 것입니다 발견했다. 어떤 이유로, 내가 원래 그렇게하는 방식으로 디스플레이 색인이 바뀌고있었습니다. 그러나 제가 참조했던 다른 값들은 아닙니다.

0

표시 순서 순서대로 0부터 시작하여 열을 반복해야합니다. 그렇지 않으면 루프가 진행됨에 따라 열의 순서가 벗어납니다.

관련 문제