2017-11-02 10 views
-1

こんにちは、グリッド表示のクラス名はデータベースから来て、別のform.butに渡していますが、表示中ですがクラス名を更新している間にクラスとして空の値をとりますcomoboxの値を別のフォームに渡すとエラーが発生する

クラス名を更新したい場合は、データベースに同じ値を渡します。それ以外の場合は古いクラス名が必要です。しかし、単にdbの空の値を更新するだけでは何も動作しません。

Form1.vbを

Private Sub DataGridView1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DataGridView1.Click 
     Dim form As New update 
     form.ComboBox1.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString   
     form.ShowDialog() 
    End Sub 

Form2.vb:

Private Sub showItems() 
     Button3.Visible = False 

     provider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" 
     dataFile = "D:\jyothi school\School Management\School Management\AddStudent.accdb" 
     connString = provider & dataFile 
     myConnection.ConnectionString = connString 
     myConnection.Open() 
     Dim ds As New DataSet 
     Dim dt As New DataTable 
     ds.Tables.Add(dt) 
     Dim da As New OleDbDataAdapter 
     Dim query = "Select * From Add_Student " 
     da = New OleDbDataAdapter(query, myConnection) 

     da.Fill(dt) 

     'checking the result[user_name] = '" & user_name.Text & "' 
     ' If userFound = True Then 
     'Add_Fee.Show() 

     'End If' 
     Me.ComboBox1.SelectedValue = ComboBox1.SelectedText 
     ' Else 
     ComboBox1.Items.Add("NURSERY") 
     ComboBox1.Items.Add("LKG") 
     ComboBox1.Items.Add("UKG") 
     ComboBox1.Items.Add("1ST") 
     ComboBox1.Items.Add("2ND") 
     ComboBox1.Items.Add("3RD") 
     ComboBox1.Items.Add("4TH") 
     ComboBox1.Items.Add("5TH") 
     ComboBox1.Items.Add("6TH") 
     ComboBox1.Items.Add("7TH") 
     ComboBox1.Items.Add("8TH") 
     ComboBox1.Items.Add("9TH") 
     ComboBox1.Items.Add("10TH") 
     Selected_Class = ComboBox1.SelectedText 
     myConnection.Close() 




    End Sub 


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     provider1 = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" 
     dataFile1 = "D:\jyothi school\School Management\School Management\AddStudent.accdb" 
     connString1 = provider1 & dataFile1 
     myConnection1.ConnectionString = connString1 
     myConnection1.Open() 


     Dim str1 As String 
     str1 = "Update [Add_Student] set [StudentName] = '" & TextBox4.Text & "',[Mobile No] = " & TextBox3.Text & ",[Class] = '" & Selected_Class & "',[Total Fee] = " & TextBox5.Text & ",[Old Fee] = " & TextBox2.Text & ",[Deposit] = " & TextBox6.Text & ",[New_Deposit]= " & TextBox8.Text & ",[Pending Fee] = " & TextBox7.Text & " Where [StudentId] = " & TextBox1.Text & "" 
     Dim cmd As OleDbCommand = New OleDbCommand(str1, myConnection1) 
     Try 
      If cmd.ExecuteNonQuery() > 0 Then 
       MsgBox("Successfully Updated Students Details") 
       cmd.ExecuteNonQuery() 
       cmd.Dispose() 
       myConnection1.Close() 
      End If 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 

    End Sub 
+0

具体的にどのような価値観がありますか?デバッガでこのコードをステップ実行すると、最初に "空の値"に遭遇しますが、空ではないはずです。あなたはその価値がどこから来ると思いますか? – David

+0

grid.butから何が来ているのか選択したクラス値が必要ですempty.ex:class:Lkgは同じクラス名が必要です。コンボックスを使って私が選択した4番目の手段は4番を渡したいと思っています – user3437313

+0

私にダビデに教えてください。 – user3437313

答えて

0

私はこの方法では、正しくあなたを理解場合:

DataGridView1_Click 

あなたはこの値を渡したいです:

このフォームに
form.ComboBox1.Text 

Dim form As New update 

そのような場合、それを行うにはカップルの方法があります。 1つのアプローチは、その値をフォームのコンストラクタに追加することです。これが唯一のコンストラクターである場合、値はフォームによって必要になります。オプションの場合は、複数のコンストラクタを作成します(1つは値を持ち、もう1つはありません)。

新しいコンストラクタは、そのフォームにクラスレベルの値を設定します。

Private myValue As String 

Public Sub New(ByVal Value As String) 
    myValue = Value 
End Sub 

その後、あなたはそのフォームのインスタンスを作成するときに、代わりに、直接そのフォームに制御を設定しようとしているのコンストラクタに価値を提供します:

Dim form As New update(DataGridView1.CurrentRow.Cells(3).Value.ToString) 
form.ShowDialog() 
このような何か

これは値をupdateフォームに渡す必要があります。 (別のオプションは、コンストラクタパラメータではなくパブリックプロパティを公開することです)。しかし、の場合は、の値はとなりますか? ComboBox選択値に設定する必要がある場合は、updateフォームのLoad()イベントで設定します。 の後には、ComboBoxに値が入力されています。しかし、正直言って、あなたが "フォーム2"のために示しているコードは、私には全く意味がありません。特に、ComboBoxに値を追加する部分。しかし、この文字列の値がそのフォームに必要な場合は、クラスレベル変数myValueで利用できるようになりました。

関連する問題