2016-09-02 3 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를 사용하면 항상 마지막 행의 값을 갖게됩니다. 맞다?

편집 :

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 

편집 (내가 그 안에 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

은 I가 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

확실하지

이 코드를 사용해보십시오 고의로 당신은 이것을하고 있습니다. 인 경우 edt = "ds"그러면 en이 if 블록 AddWithValue ("@ pw", "en")에 사용됩니다. 이어서 의 ElseIf EDT = "EN" 대한 ELSEIF 블록 cmd.Parameters.AddWithValue 지칭 동안 ("PW @", "DS")

+0

예, 이미 ** EditTime ** 열에 ** 'en'** 또는 ** 'ds'** 값이있는 데이터가 이미 있기 때문에 유용합니다 (이 방법은 사용 또는 사용 중지됨을 의미합니다 , 각각) @Mukul –