2014-12-29 3 views
0

ListView에서 레코드를 표시 할 때 문제가 있습니다. 지금 가지고있는 데이터베이스에는 10k + 개의 레코드 (행)가 있습니다. 데이터를 ListView로 가져올 때 많은 시간이 걸리므로 표시된 항목을 50 개로 제한합니다. 50 개 항목을 성공적으로 표시 할 수 있습니다. 하지만 내 문제는 사용자가 "다음 페이지"버튼을 클릭하면 다음 51-100 레코드를 어떻게 표시합니까? 어디서부터 시작해야할지 모르겠습니다. 도와주세요. 감사.vb.net listview 다음 레코드 표시

da = New MySqlDataAdapter 
    Dim strSql As String = "SELECT * FROM tbl_questions" 
    ListView1.Items.Clear() 

    Call connect() 

    da.SelectCommand = New MySqlCommand(strSql) 
    da.SelectCommand.Connection = cn 
    da.Fill(ds) 

    Dim i As Integer 
    For i = 0 To ds.Tables(0).Rows.Count - 1 

     If i = 49 Then 
      Exit For 
     End If 

     Dim lv As ListViewItem = ListView1.Items.Add(ds.Tables(0).Rows(i)("function")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("subject")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("level")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("type")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("question")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("choice_a")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("choice_b")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("choice_c")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("choice_d")) 
     lv.SubItems.Add(ds.Tables(0).Rows(i)("correct_ans")) 

    Next 
    da.Dispose() 
+1

DataGridView는 ** 많이 ** 적합합니다. 단순히 데이터 소스에 바인드하면 데이터 소스가 채워집니다. – Plutonix

+0

... 그리고 다른 것;) LV에 표시 할 데이터의 복사본을 만드는 방법. DataTable을 DGV에 바인딩하면 데이터가 DGV에 그대로 표시됩니다. 복사본이 없습니다. – Plutonix

+0

몇 가지 예를 들어 주시겠습니까? 내가 항상 listview를 사용하기 때문에 나는 datagridview에 익숙하지 않다. 감사 –

답변

0

winforms를 사용하고 있다고 가정합니다. ListView 컨트롤에는 ListView.VirtualMode 속성과 ListView.CacheVirtualItems 이벤트를 사용하여 시도 할 수있는 가상화 기능이 있습니다. 이 MSDN 링크가 도움이되는지 확인하십시오. 위의 링크에서

:

가상 모드는 여러 상황에서 유용 할 수 있습니다. ListView 개체를 이미 메모리에있는 매우 큰 컬렉션에서 채워야하는 경우 각 항목에 대해 ListViewItem 개체를 만드는 것은 낭비 일 수 있습니다. 가상 모드에서는 필요한 항목 만 만들어집니다. 다른 경우 ListViewItem 개체의 값을 자주 다시 계산해야 할 수 있으며 전체 컬렉션에 대해이 작업을 수행하면 용납 할 수없는 성능이 발생합니다. 가상 모드에서는 필요한 항목 만 계산됩니다.