Quantcast
Viewing all articles
Browse latest Browse all 18858

Binding Datagrid to a database using Observable collection ( MVVM pattern & developing in c#)

I am trying to bind a datagrid from a Database table using Observablecollection. when I came across a similar post- link on this forum , I tried to implement it on my project. but still, I am struggling to have a proper result. 

here is my code , kindly help me to find where I have gone wrong ? 

XAML :

<Window x:Class="MVVM_DemoAppl.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ViewModel="clr-namespace:MVVM_DemoAppl.ViewModels" Title="MainWindow" Height="350" Width="525">

<Window.DataContext><ViewModel:MainViewModel/></Window.DataContext><Grid><DataGrid ItemsSource="{Binding SystemStatusData}" AutoGenerateColumns="False" Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="479" ><DataGrid.Columns><DataGridTextColumn Header="System" Width="auto" Binding="{Binding System}" /><DataGridTextColumn Header="Date" Width="auto" Binding="{Binding Date}"/><DataGridTextColumn Header="Type" Width="auto" Binding="{Binding Types}"/><DataGridTextColumn Header="Message" Width="auto" Binding="{Binding Messages}"/><DataGridTextColumn Header="Critical" Width="auto" Binding="{Binding Critical}"/></DataGrid.Columns></DataGrid></Grid></Window>


My Model class SystemStatus.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace MVVM_DemoAppl.Models
{
    public class SystemStatus: INotifyPropertyChanged
    {
        public SystemStatus()
        {
 
        }
        private string _system;
        private DateTime _date;
        private string _type;
        private string _message;
        private bool _critical;

        public string Systems
        {
            get { return _system; }
            set { _system= value; OnPropertyChanged("_system"); }
        }

        public DateTime Date
        {
            get { return _date; }
            set { _date = value; OnPropertyChanged("Date"); }
        }
        public string Types
        {
            get { return _type; }
            set { _type = value; OnPropertyChanged("Types"); }
        }
        public string Messages
        {
            get { return _message; }
            set { _message = value; OnPropertyChanged("Messages"); }
         }
        public bool Critical
        {
            get { return _critical; }
            set { _critical = value; OnPropertyChanged("Critical"); }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyname)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyname));
        }

        
    }
}


My ViewModel class 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Data.EntityModel;
using MVVM_DemoAppl.Models;
using MVVM_DemoAppl;


namespace MVVM_DemoAppl.ViewModels
{
    public class MainViewModel : INotifyPropertyChanged
    {
      Model _myModel = new Model();
      private ObservableCollection<SystemStatus> _systemStatusData= new ObservableCollection<SystemStatus>();
      public ObservableCollection<SystemStatus> SystemStatusData
      {
        get { return _systemStatusData; }
        set
          {
            _systemStatusData= value;
            OnPropertyChanged("SystemStatusData");
          }
      }

    public MainViewModel()
     {
       initializeload();
     }

    private void initializeload()
    {
       DataTable table = _myModel.getData();

       for (int i = 0; i < table.Rows.Count; ++i)
       SystemStatusData.Add(new SystemStatus
       {
    Systems= table.Rows[i][0].ToString(),
    Date =Convert.ToDateTime(table.Rows[i][1]),
    Types = table.Rows[i][2].ToString(),
   Messages = table.Rows[i][3].ToString()             Critical = Convert.ToBoolean(table.Rows[i][1]),
        });
    }
   public event PropertyChangedEventHandler PropertyChanged;

  private void OnPropertyChanged(string propertyname)
    {
      var handler = PropertyChanged;
      if (handler != null)
      handler(this, new PropertyChangedEventArgs(propertyname));
    }
   }

  public class Model
   {
    string con = ConfigurationManager.AppSettings["ConnectionStrings"];
   public DataTable getData()
  {
   DataTable ndt = new DataTable();
   SqlConnection sqlcon = new SqlConnection(con);
   sqlcon.Open();
  SqlDataAdapter da = new SqlDataAdapter("select top 5 System,Date,Typ,Message,Critical from test_DB.dbo.SystemStatus",con);
  da.Fill(ndt);
  return ndt;
  }
 }
}

My MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace MVVM_DemoAppl.Views
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}


App.xaml.cs :

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
using MVVM_DemoAppl.ViewModels;
using MVVM_DemoAppl.Views;

namespace MVVM_DemoAppl
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var mainWindow = new MainWindow();
            var viewModel = new MainViewModel();
            mainWindow.Show();
        }
    }
}

I have error in the following content of my MainWindow.xaml  as

"Cannot create an instance of "MainViewModel".

H:\MVVM_DemoAppl\MVVM_DemoAppl\MainWindow.xaml"

I tired replacing Datacontext in Xaml by ItemsSource for the Datagrid, but still I am having this error being raised. 

kindly help me to overcome this problem. Thanks indeed.







Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>