【问题标题】:Displaying Data from SQL in TextBox by clicking ComboBox item in Visual Basic 2012通过单击 Visual Basic 2012 中的 ComboBox 项在 TextBox 中显示 SQL 中的数据
【发布时间】:2015-02-26 15:37:05
【问题描述】:

我在 SQL 中有三列,我希望通过单击 ComboBox 中的一个项目将数据显示在三个文本框中。

问题并没有真正显示出来。我可以很好地保存数据并显示。但是,其中一个文本字段将仅显示一个单元格,并且在选择其他项目时不会更新。希望这是有道理的。

这是我保存的代码:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim myconnect As New SqlClient.SqlConnection
    myconnect.ConnectionString = "Data Source=.\INFLOWSQL;Initial Catalog=RioDiary;Integrated Security=True"


    Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand()
    mycommand.Connection = myconnect
    mycommand.CommandText = "INSERT INTO MyDiary (Title, DiaryContent, DiaryDate) VALUES (@Title, @DiaryContent, @DiaryDate)"
    myconnect.Open()

    Try
        mycommand.Parameters.Add("@Title", SqlDbType.VarChar).Value = TextBox1.Text
        mycommand.Parameters.Add("@DiaryContent", SqlDbType.VarChar).Value = TextBox2.Text
        mycommand.Parameters.Add("@DiaryDate", SqlDbType.VarChar).Value = TextBox3.Text

        mycommand.ExecuteNonQuery()
        MsgBox("Success")
    Catch ex As System.Data.SqlClient.SqlException

这是在form1中显示的代码:

Imports System.Data.SqlClient

Public Class Form1
    Dim con As New SqlConnection
    Dim ds As New DataSet
    Dim da As New SqlDataAdapter
    Dim sql As String
    Dim inc As Integer
    Dim MaxRows As Integer
    Dim max As String
    Dim dt As New DataTable

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'RioDiaryDataSet5.MyDiary' table. You can move, or remove it, as needed.
        Me.MyDiaryTableAdapter.Fill(Me.RioDiaryDataSet5.MyDiary)
        Dim con As New SqlConnection("  Data Source=.\INFLOWSQL;Initial Catalog=RioDiary;Integrated Security=True")
        Dim cmd As New SqlCommand("Select Title,DiaryContent,DiaryDate FROM MyDiary ")
        Dim da As New SqlDataAdapter
        da.SelectCommand = cmd
        cmd.Connection = con
        da.Fill(ds, "MyDiary")

        con.Open()

        ComboBox1.DataSource = ds.Tables(0)
        ComboBox1.DisplayMember = "Title'"
        ComboBox1.ValueMember = "DiaryContent"
    End Sub

    Private Sub NewEntryToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewEntryToolStripMenuItem.Click
        AddEntry.Show()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged



        If (Not Me.ComboBox1.SelectedValue Is Nothing) Then
            Me.TextBox2.Text = ComboBox1.Text
            Me.TextBox3.Text = ComboBox1.SelectedValue.ToString


        End If
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
      If dt.Rows.Count > 0 Then
        TextBox1.Text = dt.Rows(0)("DiaryDate").ToString()  'Where ColumnName is the Field from the DB that you want to display

    End If
    End Sub
End Class

从代码中可以看出,我想通过单击组合框中的标题在两个单独的文本框中显示标题和日记内容。这工作正常。 我遇到的问题是 DiaryDate 仅显示第一个条目,并且在从 ComboBox 中选择项目时不会更新。

谁能帮忙?

【问题讨论】:

    标签: sql combobox textbox


    【解决方案1】:

    您可以尝试使用 ComboBox 的 SelectedItem 属性。因为这里ComboBox的DataSource是DataTable,所以ComboBox的SelectedItem代表DataTable中的一行。给定DataRow,你可以在TextBoxes中显示DataRow任意列的值:

    ........
    If (Not Me.ComboBox1.SelectedItem Is Nothing) Then
        Dim SelectedItem = TryCast(comboBox1.SelectedItem, DataRowView)
        Me.TextBox1.Text = SelectedItem.Row("Title").ToString()
        Me.TextBox2.Text = SelectedItem.Row("DiaryContent").ToString()
        Me.TextBox3.Text = SelectedItem.Row("DiaryDate").ToString()
    End If
    ........
    

    【讨论】:

    • 谢谢。我尝试了你所说的,得到了​​关于 System.Data.Row 无法转换为字符串以及 ["Title"] 中预期的标识符等的错误......
    • 更新了我的答案,我的错,与 C# 语法混淆
    • 我可以吻你。大声笑非常感谢Har07。完美运行!
    • 不客气。看着你的头像,啊……无法想象。大声笑。
    【解决方案2】:
    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cn As New SqlClient.SqlConnection("Data Source=thee-pc;Initial Catalog=jobportal;Integrated Security=True")
        Dim cmd As New SqlClient.SqlCommand
        Dim tbl As New DataTable
        Dim da As New SqlClient.SqlDataAdapter
        Dim reader As SqlClient.SqlDataReader
        Try
            cn.Open()
            Dim sql As String
            sql = "select * from Register"
            cmd = New SqlClient.SqlCommand(sql, cn)
            reader = cmd.ExecuteReader
            While reader.Read
                Dim id = reader.Item("cid")
                ComboBox1.Items.Add(id)
            End While
            cn.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim cn As New SqlClient.SqlConnection("Data Source=thee-pc;Initial Catalog=jobportal;Integrated Security=True")
        Dim cmd As New SqlClient.SqlCommand
        Dim tbl As New DataTable
        Dim da As New SqlClient.SqlDataAdapter
        Dim reader As SqlClient.SqlDataReader
        Try
            cn.Open()
            Dim sql As String
            sql = "select * from register where cid ='" + ComboBox1.Text + "'"
            cmd = New SqlClient.SqlCommand(sql, cn)
            reader = cmd.ExecuteReader
            While reader.Read
                TextBox1.Text = reader.Item("cname")
                TextBox2.Text = reader.Item("dob")
    
            End While
            cn.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多