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