首页 > 解决方案 > 为什么没有从连接 sql 查询中加载组合框

问题描述

Dim cmd As New SqlCommand("SELECT MainDepartmentsTable.ID, FeesTable.ID,FeesTable.Particular,FeesTable.Fee from MainDepartmentsTable inner join SubDepartmentsTable on MainDepartmentsTable.ID = SubDepartmentsTable.MainDeptID inner join FeesTable on SubDepartmentsTable.MainDeptID = FeesTable.SubDepartmentID WHERE FeesTable.ID = '" & TextDepartmentID.Text & "' ", con)
Dim DataAdopter = New SqlDataAdapter(cmd)
Dim dt As New DataTable
DataAdopter.Fill(dt)
Load_Deparments()

标签: vb.net

解决方案


让我们稍微简化一下:

Dim sql = "SELECT FeesTable.ID, CoNCAT(FeesTable.Particular, '-', FeesTable.Fee) as DisplayText
FROM 
  SubDepartmentsTable 
  inner join FeesTable on SubDepartmentsTable.MainDeptID = FeesTable.SubDepartmentID
WHERE SubDepartmentsTable.MainDeptID = @id"


Dim da As New SqlDataAdapter(sql, con)
da.SelectCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextDepartmentID.Text)) 'less worried about AWV with ints but read https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
Dim dt As New DataTable
da.Fill(dt)

'this part connects the data to the combo - it's the part you didn't show in your Q and what people are telling you is missing
yourCombo.DisplayMember = "DisplayText"
yourCombo.ValueMember = "ID"
yourCombo.DataSource = dt

这并不是为了解决您的问题;您从问题中遗漏了太多信息,不知道如何准确回答,因此您将不得不修改它

你需要改变的事情:

  • 在 SQL 中选择的列 - 加载您将显示的一列(我演示了如何在 DisplayText 的一个名称下组合两位信息)和一列用于支持值(ID)
  • 在 where 子句中过滤的列或文本框的名称TextDepartmentID- 费用 ID 应该等于部门 ID 对我来说似乎很奇怪,因此我更改了 SQL 以检索 MainDepartmentID 的费用详细信息因为我假设您的文本框名称是正确的,并且您打算通过子部门显示一个部门的费用
  • 阅读链接的博客,也许选择以不同的方式添加参数
  • 更改yourCombo为组合框的名称
  • 更改 DisplayMember 和 ValueMember 设置以匹配您的 SQL 查询选择的两列的名称
  • 如果您正在建立一个组合,您只需要两列,但是如果您将数据表传递到某个地方,您可以添加更多

推荐阅读