【问题标题】:Filling controls (comboboxes, textbox) with data selected from SQL Server使用从 SQL Server 中选择的数据填充控件(组合框、文本框)
【发布时间】:2016-10-26 17:30:26
【问题描述】:

我正在尝试用数据填充一堆控件。这些控件包括组合框、文本框、日期/时间等。

我最初让用户进行选择/输入数据并保存记录。对于组合框,我显示了文本,但是,作为示例保存了一个值...

ValueMember         DisplayMember
100                 Accounting
101                 Finance

在这种情况下,如果用户选择了会计,我将其保存为 100。

现在我正在尝试使用正确的数据填充这些控件,并将选择设置为保存此记录时的内容。

这就是我获取数据的方式...

dim querystring as string
dim count as integer
QueryString = "Select FirstName, LastName, Dept, Position from TblClients where IdClient = 1112"

    Dim cmd As New SqlCommand(queryString, Conn)
    Conn.Open()
    Using sdA As New SqlDataAdapter
        Using dtA As New DataTable
            sdA.SelectCommand = cmd
            count = sdA.Fill(dtA)
            If count <> 0 Then
                MsgBox("Success")
            End If

           cboContactCategory.SelectedValue = dtA.Rows(0)("Dept").ToString

        End Using
    End Using
    Conn.Close()

名字 = txtFirst; LastName = txtLast, Position = cboPosition, Dept = cboDept

我将如何设置这些值?

【问题讨论】:

  • 除了检查是否有行之外,sn-p 并没有真正做任何事情。您似乎想要的数据将在数据表中,但您在计数后将其丢弃。您可以提取该数据或使用数据绑定
  • 我在 Count If 语句之后添加了一行。是不是沿着这些思路?问题是在将数据设置为控件之前,我必须确保该字段不为空(NULL)。并非所有这些都需要保存,所以我需要能够检查是否有值

标签: vb.net combobox datatable textbox


【解决方案1】:

鉴于查询,您将几个字段加载到DataTable,然后在处理DataTable 之前不检索数据:

txtFirst.Text = dtA.Rows(0).Item("FirstName")
txtLast.Text = dtA.Rows(0).Item("LastName")

如果您坚持使用DataTable,您可能想要使用数据绑定:

txtFirst.DataBindings.Add("Text", dtClients, "FirstName")
txtLast.DataBindings.Add("Text", dtClients, "LastName")

当前行的值将显示在这些控件中。

如果您持久化DataTable 并将所有客户端加载到其中,则无需运行查询即可找到某人:

dtClients.DefaultView.RowFilter = String.Format("ID = {0}", intIdToFind)
' text filter:
dtClients.DefaultView.RowFilter = String.Format("Country = '{0}'", "Belgium")

这会将视图过滤到该客户或比利时的所有客户。无需编写更多 SQL 或查询数据库。当然,如果有数十万客户,您可能希望一次加载一个子集 - 比利时的客户、过去 60 天内订购的客户或其他。

完全配置的DataAdapter 还可以为您执行所有更新、删除。在某些情况下,每个表可能只需要一个 SQL 语句。示例见Searching values via a datagridview

【讨论】:

  • 我在哪里处理它?
  • Using dtA As New DataTable End Using 处理目标对象...您可能还需要考虑其他几件事(打字)
  • 我当时不坚持使用DataTable,这是我能够完成事情的唯一方法。我喜欢 DefaultView 的想法,因为我实际上是在加载带有客户端的 dataGrid,然后双击它会将用户带到另一个表单并显示每个控件中的所有信息(用于编辑)。但是在更新或删除时,我需要确保它在 sql server 中更新,否则我没有理由按照你描述的方式使用它。
  • cboDept.selecteditem=dta.rows(0).item("Dept") ?这似乎不起作用:/
  • 我不知道你是如何设置 cbo 的。数据源?物品?
猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多