2013-03-15 5 views
0

Привет, я вставляю в таблицу, а затем читаю все обратно в ListView Когда я снова открываю программу, я вижу данные, которые я только что сохранил в своем ListView, но эта запись не отображается в моем ListView во время сохранения (хотя он сохраняется в таблице).Почему ListView не освежает?

Я использую

listView.Update() 

, а также

listView.Refresh() 

, но это не похоже на работу. Я просто с помощью SELECT запроса читать данные с datareader и хранить его в моем listView следующим образом (который работает правильно)

Единственная проблема заключается в том, что ListView сразу не обновляется, но она работает, когда я закрываю/откройте программу

вот код, который я использую в конце моего метода сохранения. в основном эти два метода дозвонились

Private Sub SetColumns() 
    Dim lstpenalty As New ListView() 
    lstpenalty.Items.Clear() 
    lstpenalty.Visible = True 
    lstpenalty.Bounds = New Rectangle(New Point(390, 55), New Size(560, 379)) 
    lstpenalty.Name = "lstpenalty" 
    lstpenalty.FullRowSelect = True 


    lstpenalty.View = View.Details 
    lstpenalty.GridLines = True 


    lstpenalty.Items.Clear() 


    lstpenalty.Columns.Add("a", 75) 
    lstpenalty.Columns.Add("b", 70) 
    lstpenalty.Columns.Add("c", 105) 
    lstpenalty.Columns.Add("d", 98) 
    lstpenalty.Columns.Add("e", 90) 
    lstpenalty.Columns.Add("f", 105) 
    Me.Controls.Add(lstpenalty) 



    LoadPenaltyList(lstpenalty) 

End Sub 

Private Sub LoadPenaltyList(ByRef listView As ListView) 

    Dim gDR As OracleDataReader 
    Dim cmd As New OracleCommand 
    Dim lstpenaltyview As New ListViewItem 

    Try 

     cnn.Connect_to_Oper_Agent() 
     cmd.Connection = cnn.cnn 

     listView.Items.Clear() 


     cmd.CommandText = " select a," & _ 
          "b, " & _ 
          "c, " & _ 
          "d," & _ 
          "e," & _ 
          "f" & _ 
          " FROM myTable" & _ 
          " commit" 

     gDR = cmd.ExecuteReader() 


     While gDR.Read 

      lstpenaltyview = listView.Items.Add(Null_To_String(gDR("a"))) 
      lstpenaltyview.SubItems.Add(gDR("b")) 
      lstpenaltyview.SubItems.Add(gDR("c")) 
      lstpenaltyview.SubItems.Add(gDR("d")) 
      lstpenaltyview.SubItems.Add(gDR("e")) 
      lstpenaltyview.SubItems.Add(gDR("f")) 

     End While 

     listView.Update() 



    Catch ex As Exception 
     MsgBox("There was an error... -> " & ex.ToString) 

    Finally 
     cmd.Dispose() 
     cnn.Close_Conn() 

    End Try 


End Sub 

Спасибо за вашу помощь

+0

Эти два метода просто перерисовать управления с его текущими данными. Вам нужно снова заполнить его новыми данными. – CathalMF

+0

Сразу после того, как пользователь нажимает кнопку «Сохранить» (что делает вставку), я вызываю два метода. Один из них перестраивает listView, а другой считывает новые данные из таблиц. – user1683987

+0

Показанный код может помочь. –

ответ

0

Так что я динамически создавал ListView. Проблема заключалась в том, что он продолжал создавать ListViews друг над другом (утечка памяти), и он всегда показывал предыдущий. Я создал статический viewList по сравнению с динамическим и проблема решена: D

0

Это стоит посмотреть какие методы.

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview_methods%28v=vs.71%29.aspx

Update: Вызывает перерисовку элементом управления недопустимых областей клиентской области.

Обновить: заставляет элемент управления аннулировать свою клиентскую область и немедленно перерисовывать себя и любые дочерние элементы управления.

Чтобы обновить его, используя информацию таблицы, сначала очистите список, а затем повторите процесс, который вы использовали для первоначального заполнения.

0

Вы должны установить новый DataSource и вызвать метод DataBind, попробовать что-то вроде этого:

Public Sub RefreshListView() 

    listView.DataSource = 'get your reader here' 
    listView.DataBind() 

End Sub 

И вызовите метод RefreshListView.

-2

Используйте

For Each i As Windows.Forms.ListViewItem In ListView1.Items 
    i.Remove() 
Next 

Вместо Clear

+0

Вы должны отформатировать его так, чтобы он выглядел как код. И добавьте некоторое объяснение о том, как это решает проблему. – Teepeemm

Смежные вопросы