b

Saturday, 15 December 2012

How to bind a table in a dataset to a WPF datagrid in VB.NET and XAML

How to bind a table in a dataset to a WPF datagrid in VB.NET and XAML
  • Create  a WPF Project using VB.NET
  • Add 2 classes 
  •      Customers
  •       GetDataSet

            Customers class
 Public Class Customer
        Public Property ID() As Integer
        End Property
        Public Property FirstName() As String
        End Property
        Public Property LastName() As String
        End Property
End Class


GetDataset class


 Public Class GetDataset
       Dim dataset As DataSet =  New DataSet() 
       Private  Sub builddataset()
            dataset.Clear()
            If dataset.Tables.Count > 0 Then
                dataset.Tables(01).Constraints.Clear()
                dataset.Tables(0).Constraints.Clear()
 
            End If
            dataset.Tables.Clear()
            Dim table As DataTable =  New DataTable("SalesData") 
            Dim id As DataColumn =  New DataColumn("ID",Type.GetType(System.Int64)) 
            id.AutoIncrement = True
            id.AutoIncrementSeed = 100
            Dim salesman As DataColumn =  New DataColumn("Sales Name",Type.GetType(System.String)) 
            Dim SalesManID As DataColumn =  New DataColumn("Emp ID",Type.GetType(System.Int32)) 
            Dim yr2003 As DataColumn =  New DataColumn("2003",Type.GetType(System.Int32)) 
            Dim yr2004 As DataColumn =  New DataColumn("2004",Type.GetType(System.Int32)) 
            Dim yr2005 As DataColumn =  New DataColumn("2005",Type.GetType(System.Int32)) 
            Dim yr2006 As DataColumn =  New DataColumn("2006",Type.GetType(System.Int32)) 
            Dim yr2007 As DataColumn =  New DataColumn("2007",Type.GetType(System.Int32)) 
 
            table.Columns.Add(id)
            table.Columns.Add(salesman)
            table.Columns.Add(yr2003) table.Columns.Add(yr2004) table.Columns.Add(yr2005)
            table.Columns.Add(yr2006) table.Columns.Add(yr2007) table.Columns.Add(SalesManID)
 
            Dim row As DataRow =  table.NewRow() 
            row(1) = "Shayam" row(2) = 5000 row(3) = 6000 row(4) = 6000 row(5) = 8000 row(6) = 10000 row(7) = 11
            table.Rows.Add(row)
            row = table.NewRow()
            row(1) = "Benegal" row(2) = 8000 row(3) = 9000 row(4) = 10000 row(5) = 12000 row(6) = 14000 row(7) = 12
            table.Rows.Add(row)
            row = table.NewRow()
            row(1) = "Rowdy rathore" row(2) = 8000 row(3) = 9000 row(4) = 10000 row(5) = 12000 row(6) = 14000 row(7) = 13
            table.Rows.Add(row)
 
            row = table.NewRow()
            row(1) = "talaash" row(2) = 8000 row(3) = 9000 row(4) = 10000 row(5) = 12000 row(6) = 14000 row(7) = 14
            table.Rows.Add(row)
 
 
            Dim personalDetailsTbl As DataTable =  New DataTable("EmpDetails") 
            Dim ID As DataColumn =  New DataColumn("ID",Type.GetType(System.Int32)) 
            ID.AutoIncrement = True
            ID.AutoIncrementSeed = 11
            ID.ReadOnly = True
            Dim FirstName As DataColumn =  New DataColumn("FirstName",Type.GetType(System.String)) 
            Dim LastName As DataColumn =  New DataColumn("LastName",Type.GetType(System.String)) 
            Dim HireDate As DataColumn =  New DataColumn("HireDate",Type.GetType(System.DateTime)) 
            Dim Dept As DataColumn =  New DataColumn("Department",Type.GetType(System.Int32)) 
            Dim CTC As DataColumn =  New DataColumn("Cost to Company",Type.GetType(System.Single)) 
            personalDetailsTbl.Columns.Add(ID) personalDetailsTbl.Columns.Add(FirstName) personalDetailsTbl.Columns.Add(LastName)
            personalDetailsTbl.Columns.Add(HireDate) personalDetailsTbl.Columns.Add(Dept) personalDetailsTbl.Columns.Add(CTC)
            personalDetailsTbl.Constraints.Add("PrimaryKey_EmpID", ID, True)
            Dim PersonalRow As DataRow =  personalDetailsTbl.NewRow() 
            PersonalRow(1) = "Shyam" PersonalRow(2) = "Prasad" PersonalRow(3) = New System.DateTime(2000, 10, 12)
            PersonalRow(4) = 10 PersonalRow(5) = 10000.33f
            personalDetailsTbl.Rows.Add(PersonalRow)
            PersonalRow = personalDetailsTbl.NewRow()
            PersonalRow(1) = "Benegal" PersonalRow(2) = "Prasad" PersonalRow(3) = New System.DateTime(2012, 10, 12)
            PersonalRow(4) = 10 PersonalRow(5) = 11100.33f
            personalDetailsTbl.Rows.Add(PersonalRow)
            PersonalRow = personalDetailsTbl.NewRow()
            PersonalRow(1) = "Rowdy Rathore" PersonalRow(2) = "Kirshna" PersonalRow(3) = New System.DateTime(1990, 10, 12)
            PersonalRow(4) = 10 PersonalRow(5) = 5555.55f
            personalDetailsTbl.Rows.Add(PersonalRow)
            PersonalRow = personalDetailsTbl.NewRow()
            PersonalRow(1) = "talaash" PersonalRow(2) = "Prasad" PersonalRow(3) = New System.DateTime(1983, 10, 12)
            PersonalRow(4) = 10 PersonalRow(5) = 77677.77f
            personalDetailsTbl.Rows.Add(PersonalRow)
 
            dataset.Tables.Add(personalDetailsTbl)
            dataset.Tables.Add(table)
 
            Dim parentCol As DataColumn =  dataset.Tables("EmpDetails").Columns("ID") 
            Dim childCol As DataColumn =  dataset.Tables("SalesData").Columns("Emp ID") 
            Dim fconstraint As ForeignKeyConstraint =  New ForeignKeyConstraint(parentCol,childCol) 
            'DataRelation relation = new DataRelation("foreign_key_id", parentCol, childCol);
            'relation.ParentTable.TableName = "EmpDetails";
            'relation.ChildTable.TableName = "SalesData";
            'dataset.Relations.Add(relation);
            fconstraInteger.UpdateRule = Rule.None
            fconstraInteger.DeleteRule = Rule.None
            fconstraInteger.AcceptRejectRule = AcceptRejectRule.None
            dataset.Tables(1).Constraints.Add(fconstraint)
            dataset.EnforceConstraints = True
 
       End Sub
       Public Function GetTable() As List<Customer>
           builddataset()
           var query = from t in dataset.Tables(0).AsEnumerable()
                       select New Customer 
                       {
                        ID = t.Field<System.Int32>("ID"), FirstName = t.Field<System.String>("FirstName"), LastName = t.Field<String>("LastName") 
                       }

 
           Return query.ToList()
       End Function
       Public Function GetSingleTable() As DataTable
           builddataset()
 
           Return dataset.Tables(0)
       End Function
 End Class

'----------------------------------------------------------------
'--------


  • Add Button and DataGird  to Grid Layout in XAML
 <Button x:Name="populate" Click="populate_Click" Margin="342,194,10,32"  />
        <DataGrid HorizontalAlignment="Left" VerticalAlignment="Bottom" AutoGenerateColumns="False"
                     x:Name="datagrid1" Margin="10,0,0,10" Height="134" Width="269" Loaded="datagrid1_Loaded"
                   ItemsSource="{Binding}"
                  >
            <DataGrid.Resources>
                <local:GetDataset x:Key="mydatasetKey" x:Name="myDataSet"></local:GetDataset>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridHyperlinkColumn   Header="EMP ID"  Binding="{Binding Path=ID}"/>
                <DataGridTextColumn  Header="FirstName" Binding="{Binding Path=FirstName}"/>
                <DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}"/>
            </DataGrid.Columns>
        </DataGrid>

  • Button Event Handler
       

Private  Sub populate_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Try
 
               ' this.Content = new datagrid2();
 
                Dim ds As GetDataset =  New GetDataset() 
                customers = ds.GetTable()
                'datagrid1.DataContext = ds.GetTable();
                datagrid1.ItemsSource = ds.GetSingleTable().DefaultView
 
 
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
 
End Sub



OUTPUT

No comments:

Post a Comment