如何在DataGridView中显示ForeignKey ID值的相关字段值

时间:2016-08-16 20:30:52

标签: vb.net winforms datagridview

我有一个包含3列的datagridview - Name [string],Width [Integer],Thickness [Integer]。数据源的宽度和厚度来自外部表id [Integer]。我想在datagridview中显示实际的文本值而不是ID值。我正在使用带有标准填充的数据集(全选)。我还有两个组合框下拉列表,它们将绑定到datagridview绑定的bindingsource的值。如何让厚度和宽度的DataGridView列显示来自WidthBindingSource和ThicknessBindingSource的Name字段的Text Value。

我试图在DataGridView的CellFormatting事件中处理这个问题,但是我无法更改列以在事件args e.Value等中使用格式化值类型的字符串。

下面的代码。

Private Sub dgvDimension_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgvDimension.CellFormatting
    Dim dgv As DataGridView = DirectCast(sender, DataGridView)

    Dim IsWidthColumn As Boolean = dgv.Columns(e.ColumnIndex).Name.ToLower() = "width"
    Dim IsThicknessColumn As Boolean = dgv.Columns(e.ColumnIndex).Name.ToLower() = "thickness"

    Dim columnName As String = dgv.Columns(e.ColumnIndex).Name


    If IsWidthColumn OrElse IsThicknessColumn Then

        If dgv.Columns(e.ColumnIndex).Name.ToLower() = columnName AndAlso e.RowIndex >= 0 AndAlso TypeOf dgv(columnName, e.RowIndex).Value Is Integer Then

            Dim dt As DataTable = New DataTable

            Select Case columnName.ToLower()

                Case "width"

                    dt = DirectCast(WidthBindingSource1.DataSource, DataTable)

                    Exit Select

                Case "thickness"

                    dt = DirectCast(ThicknessBindingSource.DataSource, DataTable)

                    Exit Select

                Case Else

            End Select



            Dim expression As String = "Id=" & dgv(columnName, e.RowIndex).Value.ToString()

            Dim dRow As DataRow = dt.Select(expression).FirstOrDefault

            If Not dRow Is Nothing Then


                e.Value = dRow("Name").ToString()

                e.FormattingApplied = True


            End If

        End If


    End If


End Sub

更多代码信息如下 - 表格,bindingsource,数据集和查询信息的结构。

Select ID, Name, Width, Thickness From Dimension [DimensionBindingSource DataSet.Dimension]

[Width and Thickness need to appear in DataGridView as Width.Name and Thickness.Name - I need to be able to update the Dimension table from this form using the DimensionBindingSource. ]

Select ID, Name From Width [WidthBindingSource DataSet.Width]

Select ID, Name From Thickness  [ThicknessBindingSource DataSet.Thickness]


My cmbWidth and cmbThickness SelectedValues are bound to Dimension.Width, Dimension.Thickness 

0 个答案:

没有答案