如何从另一个数据表中查找一个值并将其显示在绑定的datagridview的未绑定列中?

时间:2013-07-30 22:14:23

标签: sql vb.net winforms datagridview

修改

对不起,我试图寻找答案,但我很难将我发现的例子翻译成我自己的场景。

我有一个MS Access数据库,其中包含“Employees”表,其中包含以下列:

“员工ID”,“姓名”,“中间人”,“最后”,“雇用日期”,“终止日期”。

另一个包含列的“工作”表:

“日期”,“员工ID”,“活动”,“工作小时数”,“部门”,“班次”,“使用的设备”,

datagridview绑定到“Work”表。我在设计时使用查询编辑器查询FillbyDate(),因此只加载特定日期的条目。

我想创建一个未绑定的列,使用员工ID来查找员工的员工名称(NAME,MIDDLE和LAST),但只显示员工姓名(如果没有)被终止了。

我对使用VB.Net进行编码完全不熟悉,这可能是我不理解或找不到合适示例的原因。我将非常感谢一些示例代码和每个步骤的注释,以了解事情是如何工作的。

这是我到目前为止的代码,但还没有完全正常工作。我能够查找员工的姓名,但我无法说明我不希望被解雇的员工出现。

 Private Sub PartePersonalDataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    'This looks up the employee's full name using the employee number from the ID column (first column)
    Try
        Dim dgvr As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
        If dgvr.Cells(0).Value IsNot Nothing AndAlso dgvr.Cells(0).Value IsNot DBNull.Value Then
            Dim empID As Integer = CInt(dgvr.Cells(0).Value)
            Dim qry = From dr As PersonalObraDataSet.PersonalObRow In PersonalObraDataSet.PersonalOb
            Where (dr.cdTrabajador = empID)
            'This returns each part of the name and joins it in the the 2nd column (name column)
            DataGridView1.Rows(e.RowIndex).Cells(1).Value = (qry.First.Nombre1 & " " & qry.First.Nombre2 & " " & qry.First.Apellido1 & " " & qry.First.Apellido2)
            DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = DefaultBackColor
        End If
        'If there is an exemption like the employee doesn't exists this turns the background color red and instead
        'of the name on the second column it shows "employee doesn't exist."
    Catch ex As Exception
        DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Red
        DataGridView1.Rows(e.RowIndex).Cells(1).Value = "ESTE EMPLEADO NO EXISTE"
        Exit Sub
    End Try
End Sub

我已经能够让“AND”部分工作,但“OR”却没有。

也许一个例子会更有意义:

John于2013年1月1日被终止。如果我在DateTimePicker(称为txtDate)上选择日期01/02/2013或更高版本,我不应该在datagridview上显示此员工,但如果我选择12/31/2012或更早版本,John仍应出现在datagridview上,因为他在此日期之前尚未终止。

由于我现在拥有代码,因此我只获得未被终止的员工,无论他们的终止日期如何。如果我选择01/01/2013并且Carl在2013年7月1日被终止,我仍然没有得到他的名字来登上datagridview,因为他有一个终止日期,这就是为什么我需要“OR”语句。

这就是我到目前为止所说的,就像我说的那样,“AND”和“OR”都没有。

Where (dr.cdTrabajador = empID) And ((dr.IsFSalidaNull) Or (txtDate.Value <= dr.FSalida))

0 个答案:

没有答案