2014-10-05 3 views
2

Так что, когда я нажимаю кнопку удаления и есть кто-то, выбранного в ListBox этот код работаетПредотвращение SelectedIndexChanged при удалении записи в VB.NET

'check if a member is selected 
    If LBmembers.SelectedItems.Count = 0 Then 
     MessageBox.Show("You have not selected a member to delete.") 
    ElseIf LBmembers.SelectedItems.Count > 0 Then 
     Dim i As String = LBmembers.SelectedItem 
     Dim dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" 
     Dim dbSource = "Data Source= C:\Users\Gotrek65\Documents\Visual Studio 2013\Projects\Ice Mining Calculator\Ice Mining Calculator\members.mdb " 
     Dim SqlQuery As String = 
      "DELETE FROM tblMembers WHERE Member = @ID;" 
     'remove member(i) from database 
     Using con = New OleDb.OleDbConnection(dbProvider & dbSource) 
      Using cmd = New OleDb.OleDbCommand(SqlQuery, con) 
       con.Open() 
       cmd.Parameters.AddWithValue("@ID", OleDb.OleDbType.Variant).Value = i 
       cmd.ExecuteNonQuery() 
       con.Close() 
      End Using 
     End Using 
     TBtimestart.Text = "" 
     TBtimeend.Text = "" 
     TBtimecycle.Text = "" 
     RBpro.Checked = False 
     RBret.Checked = False 
     RBcov.Checked = False 
     RBskiff.Checked = False 
     RBmack.Checked = False 
     RBhulk.Checked = False 
     LBmembers.Items.Remove(LBmembers.SelectedItem) 
    End If 



Private Sub LBmembers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LBmembers.SelectedIndexChanged 
     'unfinished 
     'if the selected idex changes then the individual stats should be retrieved from database and updated 
     Dim i As String = LBmembers.SelectedItem 
     Dim dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" 
     Dim dbSource = "Data Source= C:\Users\Gotrek65\Documents\Visual Studio 2013\Projects\Ice Mining Calculator\Ice Mining Calculator\members.mdb " 
     Dim SqlQuery As String = "SELECT StartTime, EndTime, ShipCode, CycleTime FROM tblMembers WHERE Member = @ID;" 
     Using con = New OleDb.OleDbConnection(dbProvider & dbSource) 
      Using cmd = New OleDb.OleDbCommand(SqlQuery, con) 
       con.Open() 
       cmd.Parameters.AddWithValue("'@ID'", OleDb.OleDbType.VarWChar).Value = i 
       'EXCEPTION when deleting data from tblMembers function "Parameter @ID has no default value." 
       Using reader = cmd.ExecuteReader() 
        If reader.Read() Then 
         'reader is outputing "System.Data.OleDb.OleDbDataReader" 
         'but running the same query in access just yields 4 blank values... 
         TBtimestart.Text = reader.ToString(0) 
         TBtimeend.Text = reader.ToString(1) 
         Dim j = Convert.ToInt32(reader.ToString(2)) 
         TBtimecycle.Text = reader.ToString(3) 
         If j = 1 Then 
          RBpro.Checked = True 
         ElseIf j = 2 Then 
          RBret.Checked = True 
         ElseIf j = 3 Then 
          RBcov.Checked = True 
         ElseIf j = 4 Then 
          RBskiff.Checked = True 
         ElseIf j = 5 Then 
          RBmack.Checked = True 
         ElseIf j = 6 Then 
          RBhulk.Checked = True 
         Else 
          RBpro.Checked = False 
          RBret.Checked = False 
          RBcov.Checked = False 
          RBskiff.Checked = False 
          RBmack.Checked = False 
          RBhulk.Checked = False 
          Exit Sub 
         End If 
        End If 
        con.Close() 
       End Using 
      End Using 
     End Using 
    End Sub 

пытается предотвратить SelectedIndexChanged запуск при удалении ввода/член из списка. Любопытно, если есть возможный способ сделать это, потому что это только начинает становиться глупым.

Дополнительная информация о программе.

LBmembers (listbox) используется для обновления базы данных из указанного списка. Также, когда вы выбираете запись в списке (LBmembers), она должна перейти в базу данных (доступ к DB tblMembers (столбцы: элемент (текст), начальный текст (текст), конечный текст (текст), ShipCode (число), CycleTime (число) WorkPercent (номер), доля (число)) должен быть выведен из указанной базы данных и заполняется в их конкретные коробки.

Позвольте мне знать, если вам нужно больше информации о коде.

+0

Это [проблема XY] (http://xyproblem.info/), потому что нет ничего в выполнении домашних заданий, которые говорят, чтобы быть уверенным, чтобы отключить это событие так показать код illustrati. Реальная проблема. Если вам просто не нравится событие, не помещайте в обработчик никакого кода. – Plutonix

+2

Временное разрешение события не имеет никакого эффекта, довольно нормальное, наиболее легко выполняется с помощью простого флага bool. Но это звучит как ошибка. Да, выбранный индекс правильно изменился, потому что вы удалили запись из списка. Но выбранный элемент не изменился. –

+0

сообщение обновлено с гораздо большим количеством кода. Я вижу, что вы указываете на Plutonix и не пытаетесь использовать здесь домашнее слово, поскольку это не программа для работы в школе. Я просто пытаюсь узнать .net, программируя что-то полезное для сообщества. – Gotrek65

ответ

2

Простого флага игнорировать изменения при желании :

Private ignoreChange As Boolean 
Private Sub DeleteBtn_Click(... 
    ignoreChange = True 
    '... lots of code 
    LBmembers.Items.Remove(LBmembers.SelectedItem) 

    ignoreChange = False 
End Sub 

Private Sub LBmembers_SelectedIndexChanged(sender ... 
    If ignoreChange Then Exit Sub 
    ' lots more code 

End Sub 
+0

Спасибо, что я пытался исследовать, прежде чем спрашивать, как это сделать. – Gotrek65

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