2016-09-02 15 views
1

VB.netのMy If Elseステートメントは、私が作成したIfまたはElseIf条件のいずれかをランダムに表示しています。VB.netのElseステートメントの結果がランダムの場合

DataGridViewチェックボックスをオンにしてLinkLabelをクリックすると、システムが選択された行を取得し、 "EditTime"列を "ds"または "en"に更新します。既に列にあるものに依存します

したがって、 "EditTime"列のデータが "ds"に設定されている場合、If Else条件は "en"に変更する必要があります。

Dim en As OleDbCommand = New OleDbCommand("SELECT * FROM [Roster1]", myConnection) 
     Dim d As OleDbDataReader = en.ExecuteReader 
     Dim edt As String = "" 
     While d.Read 
      edt = d("EditTime").ToString 
     End While 


     Dim CheckedRows = 
      (
       From Rows In AdminTabDisplay.Rows.Cast(Of DataGridViewRow)() 
       Where CBool(Rows.Cells("ck").Value) = True 
      ).ToList 
     If CheckedRows.Count > 0 Then 

     Dim sb As New System.Text.StringBuilder 
     For Each row As DataGridViewRow In CheckedRows 
      sb.AppendLine(row.Cells("Employee ID").Value.ToString) 

     Next 

      If edt = "ds" Then 
       Dim st As String = sb.ToString 
       Dim value As Integer = CInt(st) 
       Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
       cmd.Parameters.AddWithValue("@pw", "en") 
       cmd.Parameters.AddWithValue("@v", value) 
       cmd.ExecuteNonQuery() 
       MsgBox("Edit enabled!") 

      ElseIf edt = "en" Then 
       Dim st As String = sb.ToString 
       Dim value As Integer = CInt(st) 
       Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
       cmd.Parameters.AddWithValue("@pw", "ds") 
       cmd.Parameters.AddWithValue("@v", value) 
       cmd.ExecuteNonQuery() 
       MsgBox("Edit disabled!") 
      End If 

これは私のコードです。しかし、出力は少しランダム化されているようです。

答えて

0

[Roster1]テーブルにはいくつの行がありますか?理由は次のとおりです:

While d.Read 
     edt = d("EditTime").ToString 
    End While 

edtでは常に最後の行の値があります。正しい?

EDIT:

Dim CheckedRows = 
     (
      From Rows In AdminTabDisplay.Rows.Cast(Of DataGridViewRow)() 
      Where CBool(Rows.Cells("ck").Value) = True 
     ).ToList 
    If CheckedRows.Count > 0 Then 

    For Each row As DataGridViewRow In CheckedRows 

     Dim st as String = row.Cells("Employee ID").Value.ToString 
     Dim value As Integer = CInt(st) 

     Dim en As OleDbCommand = New OleDbCommand("SELECT * FROM [Roster1] WHERE [Employee ID] = @v", myConnection) 
     cmd.Parameters.AddWithValue("@v", value) 
     Dim d As OleDbDataReader = en.ExecuteReader 
     Dim edt As String = d("EditTime").ToString 

     If edt = "ds" Then 
      Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
      cmd.Parameters.AddWithValue("@pw", "en") 
      cmd.Parameters.AddWithValue("@v", value) 
      cmd.ExecuteNonQuery() 
      MsgBox("Edit enabled!") 

     ElseIf edt = "en" Then 
      Dim st As String = sb.ToString 
      Dim value As Integer = CInt(st) 
      Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
      cmd.Parameters.AddWithValue("@pw", "ds") 
      cmd.Parameters.AddWithValue("@v", value) 
      cmd.ExecuteNonQuery() 
      MsgBox("Edit disabled!") 
     End If 
    Next 

EDIT(私はそれにWHILEループを追加し、いくつかの変数を編集し、それが動作!)::もし

Dim CheckedRows = 
    (
     From Rows In AdminTabDisplay.Rows.Cast(Of DataGridViewRow)() 
     Where CBool(Rows.Cells("ck").Value) = True 
    ).ToList 
    If CheckedRows.Count > 0 Then 


     For Each row As DataGridViewRow In CheckedRows 

      Dim st As String = row.Cells("Employee ID").Value.ToString 
      Dim value As Integer = CInt(st) 

      Dim en As OleDbCommand = New OleDbCommand("SELECT * FROM [Roster1] WHERE [Employee ID] = @v", myConnection) 
      en.Parameters.AddWithValue("@v", value) 
      Dim d As OleDbDataReader = en.ExecuteReader 
      Dim edt As String = "" 

      While d.Read 
       edt = d("EditTime").ToString 
      End While 

      If edt = "ds" Then 
       Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
       cmd.Parameters.AddWithValue("@pw", "en") 
       cmd.Parameters.AddWithValue("@v", value) 
       cmd.ExecuteNonQuery() 
       MsgBox("Edit enabled!") 

      ElseIf edt = "en" Then 
       Dim cmd As OleDbCommand = New OleDbCommand("UPDATE [Roster1] SET [EditTime] = @pw WHERE [Employee ID] = @v", myConnection) 
       cmd.Parameters.AddWithValue("@pw", "ds") 
       cmd.Parameters.AddWithValue("@v", value) 
       cmd.ExecuteNonQuery() 
       MsgBox("Edit disabled!") 
      End If 
     Next 

    End If 
+0

現在私はそれに6行を有します。しかし、私はちょうどダミーデータを使用しているので、最終的に増加します。 edtは最後の行だけを取得しますか? –

+0

はい、もちろんです。現在のEployee IDのedt値ではなく、常に最後の値があります。最初のクエリを 'Dim en As OleDbCommand = New OleDbCommand '(" SELECT * FROM [Roster1] WHERE [Employee ID] = xx "、myConnection)'として変更し、foreach文で移動する必要があります。 – Andrea

+0

foreachステートメントで移動した後、Whileループを削除する必要がありますか? foreach文の外で変数** edt **をどのように呼び出すのですか? @Andrea –

0

わからない

このコードを試してみてください意図的にこれをやっています。 if edt = "ds" then enがifブロックAddWithValue( "@ pw"、 "en")で使用されています。 のElseIf EDT = "エン" の次に ELSEIFブロックcmd.Parameters.AddWithValue( "@ PW"、 "DS")を指す

+0

が役に立ちました(これは有効または無効を意味します、それぞれ)@Mukul –

関連する問題