This is a mirror of official site: http://jasper-net.blogspot.com/

WPF 4: Using ObjectDataProvider for DataBinding

| Thursday, March 31, 2011
Windows Presentation Foundation (WPF) has provided many features for developing Data Driven applications. Using the DataBinding feature of WPF, effective data representation can easily be achieved. WPF allows developers to define an instance of the Data Access Object directly in XAML. ObjectDataProvider is one of the effective mechanisms for DataBinding in WPF. We use this provider if the application contains a separate Data Access Layer. ObjectDataProvider defines the instance of the class and makes call to the various methods of the class. Follow these steps to use the ObjectDataProvider for Databinding in WPF applications

Step 1: In VS 2010, create a WPF application and name it as ‘WPF40_Database’. To this application, add a new class file and name it as ‘DataAccessLayer.cs’. Write the following code in it:

Note: To reduce code, I haven’t used the try-catch-finally block but make sure you do that in your application. Alternatively use the using block to release resources, once they are used.

using System;
using System.Collections.ObjectModel;
using System.Data.SqlClient;

namespace WPF40_Database
{
    public class ImageEmployee
    {
        public int EmpNo { get; set; }
        public string EmpName { get; set; }
        public int Salary { get; set; }
        public int DeptNo { get; set; }
        public byte[] EmpImage { get; set; }
    }

    public class CDataAccess
    {
        ObservableCollection<ImageEmployee> _EmpCollection;

        public ObservableCollection<ImageEmployee> EmpCollection
        {
            get { return _EmpCollection; }
            set { _EmpCollection = value; }
        }

        public CDataAccess()
        {
            _EmpCollection = new ObservableCollection<ImageEmployee>();
        }

        public ObservableCollection<ImageEmployee> GetEmployees()
        {
            SqlConnection conn =
            new SqlConnection("Data Source=.;Initial Catalog=Company;" +
                                "Integrated Security=SSPI");
            SqlCommand cmd = new SqlCommand();
            conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = "Select * from ImageEmployee";

The above code contains two classes ‘ImageEmployee’ - which defines properties compatible to the Table column and the class ‘CDataAccess’, with a method called ‘GetEmployees()’ which makes a call to the database and retrieves rows from the table. The code in this method stores all the data in an ObservableCollection<T>.

Step 2: Open MainWindow.xaml and write the following XAML code:

<Window x:Class="WPF40_Database.MainWindow"
        xmlns:data="clr-namespace:WPF40_Database"
        Title="MainWindow" Height="350" Width="912">
    <Window.Resources>
        <ObjectDataProvider x:Key="objDs"
                             ObjectType="{x:Type data:CDataAccess}"
                             MethodName="GetEmployees">
        </ObjectDataProvider>

        <DataTemplate x:Key="EmpDataTemplate">
            <StackPanel Orientation="Horizontal">
              <TextBlock Text="{Binding EmpName}"></TextBlock>
              <Image Source="{Binding EmpImage}"  Height="60" Width="60"/>
            </StackPanel>
        </DataTemplate>

    </Window.Resources>
    <Grid DataContext="{Binding Source={StaticResource objDs}}">
     <ComboBox Height="80" HorizontalAlignment="Left" Margin="29,30,0,0"
                  Name="lstEmployee" VerticalAlignment="Top" Width="274"
                  ItemsSource="{Binding}"
                 ItemTemplate="{StaticResource EmpDataTemplate}"
                   IsSynchronizedWithCurrentItem="True"/>

Read more: devCurry

Posted via email from Jasper-net

0 comments: