DataGridView / get bound table name?

Jess31
Jess31 used Ask the Experts™
on
Using vb.net with DataGridView.
The DataGridView is bound to a table. How can I get the name of the bound data table from the DataGridView?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Ryan ChongSoftware Team Lead

Commented:
you may try this;

YourDataGridView.DataMember

Open in new window


OR

Dim src As BindingSource = YourDataGridView.DataSource
        MessageBox.Show(src.DataMember)

Open in new window

Author

Commented:
Ryan,
first method returns ""

second one gives this error:
Unable to cast object of type 'System.Data.DataTable' to type 'System.Windows.Forms.BindingSource'.
MsgBox(CType(DataGridView1.DataSource, DataTable).TableName)

Open in new window

Learn Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

Author

Commented:
returns ""
Complete solution for datagrid binded to bindingsource/dataset/datatable (not supporting LINQ classes)
Private Function GetBoundTableName(dgv As DataGridView) As String
    If dgv.DataSource Is Nothing Then Return ""
    Dim dt As DataTable = Nothing
    If TypeOf dgv.DataSource Is DataTable Then
        dt = CType(dgv.DataSource, DataTable)
    ElseIf TypeOf dgv.DataSource Is DataSet Then
        dt = GetDsDataTable(CType(dgv.DataSource, DataSet), dgv.DataMember)
    ElseIf TypeOf dgv.DataSource Is BindingSource Then
        dt = GetBsDataTable(CType(dgv.DataSource, BindingSource))
    End If
    If dt Is Nothing Then Return ""
    Return dt.TableName
End Function
'Get datatable binded to bindingsource
Private Function GetBsDataTable(ByVal bs As BindingSource) As DataTable
    If TypeOf bs.DataSource Is DataTable Then Return CType(bs.DataSource, DataTable)
    Return GetDsDataTable(GetBsDataSet(bs), bs.DataMember)
End Function
'Get dataset binded to bindingsource
Private Function GetBsDataSet(ByVal bs As BindingSource) As DataSet
    If TypeOf bs.DataSource Is DataSet Then Return CType(bs.DataSource, DataSet)
    If TypeOf bs.DataSource Is BindingSource Then Return GetBsDataSet(CType(bs.DataSource, BindingSource))
    Return Nothing
End Function
'Get datatable in dataset (either as table or relation)
Private Function GetDsDataTable(ds As DataSet, tableName As String) As DataTable
    If ds Is Nothing OrElse tableName = "" Then Return Nothing
    If ds.Tables.Contains(tableName) Then Return ds.Tables(tableName)
    If ds.Relations.Contains(tableName) Then Return ds.Relations(tableName).ChildTable
    Return Nothing
End Function

Open in new window

Author

Commented:
still getting ""
And I am binding a DataTable. Just like this DataGridView1.DataSource = dt
How do you create dt?
PS. You must set datatable name:
Dim dt As New DataTable("Test")
or
Dim dt As New DataTable()
dt.TableName = "Test"
Ryan ChongSoftware Team Lead

Commented:
MsgBox(CType(DataGridView1.DataSource, DataTable).TableName)

Open in new window

that posted by Ark should get the name you wanted.

make sure before you bind your DataTable to your DataGridView, you got set its TableName accordingly?

like:

Dim dt As New DataTable
        dt.TableName = "test 123"
        dt.Columns.Add("ID", GetType(Integer))
        dt.Columns.Add("Name", GetType(String))
        dt.Columns.Add("Date", GetType(DateTime))

        dt.Rows.Add(1, "John", DateTime.Now)
        dt.Rows.Add(2, "Peter", DateTime.Now)

        DataGridView1.DataSource = dt

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial