Search code examples
wpfvb.netdatatabledatagrid

Binding a DataTable to DataGrid WPF (VB.net)


I have been searching for what feels like all day but cannot seem to solve this so i thought i would ask Myself.

I have a DataTable constructed like so:

        Dim dtAttendanceTimes As New DataTable

        Dim dcEmployee As New DataColumn With {
            .ColumnName = "Employee",
            .DataType = GetType(String)}
        dtAttendanceTimes.Columns.Add(dcEmployee)

        Dim dcDate As New DataColumn With {
            .ColumnName = "Date",
            .DataType = GetType(String)}
        dtAttendanceTimes.Columns.Add(dcDate)

        Dim dcClockIn As New DataColumn With {
            .ColumnName = "Clock In",
            .DataType = GetType(String)}
        dtAttendanceTimes.Columns.Add(dcClockIn)

        Dim dcClockType As New DataColumn With {
            .ColumnName = "Type",
            .DataType = GetType(String)}
        dtAttendanceTimes.Columns.Add(dcClockType)

        Dim dcApproved As New DataColumn With {
            .ColumnName = "Approved",
            .DataType = GetType(String)}
        dtAttendanceTimes.Columns.Add(dcApproved)

        For Each drAttendaceTime As DataRow In AttendancetimesAdaptor.GetDataByEmployeeID(intEmployeeID).Rows
            dtAttendanceTimes.Rows.Add(drAttendaceTime("fkEmployee"), drAttendaceTime("strDate"), drAttendaceTime("strClockIn"), drAttendaceTime("strType"), drAttendaceTime("strApproved"))
        Next

        dgAttendanceTimes.ItemsSource = dtAttendanceTimes.DefaultView

And in XAML i construct my DataGrid like so:

                        <DataGrid x:Name="dgAttendanceTimes" AutoGenerateColumns="False" Style="{StaticResource MyDataGridStyle}" Grid.Column="1" Grid.Row="1" Grid.RowSpan="3">
                    <DataGrid.Columns>
                            <DataGridTextColumn Header="Employee" x:Name="Employee" Width="*" Binding="{Binding Path=Employee}"/>
                            <DataGridTextColumn Header="Date" x:Name="Date" Width="*" Binding="{Binding Path=Date}"/>
                            <DataGridTextColumn Header="Clock In" x:Name="ClockIn" Binding="{Binding Path=ClockIn}"/>
                            <DataGridTextColumn Header="Type" x:Name="Type" Visibility="Hidden" Binding="{Binding Path=Type}"/>
                            <DataGridTextColumn Header="Approved" x:Name="Approved" Binding="{Binding Path=Approved}"/>
                        </DataGrid.Columns>
                </DataGrid>

Yet when i run it i just get blank rows, i get the right amount of rows just all blank and no columns?

Any help is appreciated.


Solution

  • You can simply add column in DataTable like below:

     With dt.Columns
           .Add("SrNo", GetType(Integer))
           .Add("Name", GetType(String))
      End With
    

    And in XAML add ItemsSource="{Binding}"

    Now before adding row to datatable add below line:

        dg.ItemSource= dt.DefaultView()
    

    Now add rows to datatable and it will reflect to your datagrid automatically.