我遇到了VB.net和它的问题。数据库,在将数据插入表时,我需要插入外键的值而不是键本身。
例如,我有两个表:员工,部门。
使用以下模型
Department (DepID pk, DepName)
Employee (EmpID pk, EmpName, DepID fk)
使用vb winform将数据插入Employee时,
我需要在DepID ...的位置插入(或从组合中选择)DepName。
NB1:我可以使用列数& amp;宽度。
NB2:我可以这样选择数据,但我说的是操纵数据,比如插入,更新,删除...
答案 0 :(得分:0)
What is needed, is to allow the user to choose the DepName when inserting new Employee.. and not the ID
这是精确使用ValueMember
和DisplayMember
从绑定控件获得的功能:
Dim SQL As String = "Select * FROM Department ORDER BY DeptName"
Using cmd As New OleDbCommand(Sql, dbCon)
myDS = New DataSet("Dept")
Dim da As New OleDbDataAdapter(cmd)
da.Fill(myDS, "Dept")
frmM.cboDept.DisplayMember = "DeptName" ' what to SHOW
frmM.cboDept.ValueMember = "DeptID" ' value to track
frm.cboDept.DataSource = myDS.Tables(0)
End Using
您可以在表单中添加适配器等以跳过代码。 CBO中的每个项目都是数据库行对象,但控件将显示DisplayMember
指示的列中的数据,在本例中为“DeptName”
获取值,即DeptID:
Private Sub cboDept_SelectedValueChanged(sender, e ...)
myEmployee.DeptID = Convert.ToInt32(cboDept.SelectedValue)
End Sub
使用ValueMember属性,我们使用SelectedValue
属性从cbo中选择的数据行中获取DeptID。数据类型将与DB Column的数据类型匹配。
您可以使用List(Of Dept)做同样的事情,其中Dept是您构建的类,用于显示名称但允许您检索DeptID。