Skip to main content

WPF DataGrid XAML Binding

DataGrid in one of the powerfull control in WPF. we can easily load our Datagrid if we bind the DataGrid with our Class property. consider the DataGrid.


To bind this DataGrid i have use this class & hare i also Implement INotifyPropertyChanged property for datagrids cell property change event. hare Apv from & Apv To Datepicker change event will change the value of Apv Days.




  

   public class ELeaveApprove : INotifyPropertyChanged  
   {  
     public long Appr_LeaveId { get; set; }  
     public string Appr_LeaveType { get; set; }  
     public int? Appr_RemainLeave { get; set; }  
     public DateTime Appr_FromDate { get; set; }  
     public DateTime Appr_ToDate { get; set; }  
     public string Appr_Action { get; set; }  
     public long Appr_EmpId { get; set; }  
     public int? Apply_Day { get; set; }  
     public string Appr_Status { get; set; }  
     private int apvNoOfdays;  
     public string Emp_Name { get; set; }  
     public string Emp_Department { get; set; }  
     public string Department_Name { get; set; }  
     public string Designation_Name { get; set; }  
     public long Apply_ID { get; set; }  
     public int Appr_TotalLeave  
     {  
       get  
       {  
         return this.apvNoOfdays;  
       }  
       set  
       {  
         if (value != this.apvNoOfdays)  
         {  
           this.apvNoOfdays = value;  
           NotifyPropertyChanged("Appr_TotalLeave");  
         }  
       }  
     }  
     private void NotifyPropertyChanged(string info)  
     {  
       if (PropertyChanged != null)  
       {  
         PropertyChanged(this, new PropertyChangedEventArgs(info));  
       }  
     }  
     public event PropertyChangedEventHandler PropertyChanged;  
   }  
XAML:

      <DataGrid AutoGenerateColumns="False" Height="264" HorizontalAlignment="Left" Margin="2,1,0,0" Name="approveDataGrid" VerticalAlignment="Top" Width="1033" CanUserAddRows="False">  
           <DataGrid.Columns>  
             <DataGridTextColumn Header="Apply Id" Binding="{Binding Path=Apply_ID}" Width="70"/>  
             <DataGridTextColumn Header="Name" Binding="{Binding Path=Emp_Name}" Width="70"/>  
             <DataGridTextColumn Header="Department" Binding="{Binding Path=Department_Name}" Width="70"/>  
             <DataGridTextColumn Header="Designation" Binding="{Binding Path=Designation_Name}" Width="70"/>  
             <DataGridTextColumn Header="Leave For" Binding="{Binding Path=Appr_LeaveType}" Width="70"/>  
             <DataGridTextColumn Header="Apy Day's" Binding="{Binding Path=Apply_Day}" Width="70"/>  
             <DataGridTextColumn Header="Apy From " Binding="{Binding Path=Appr_FromDate,StringFormat={}{0:MM/dd/yyyy}}" Width="70"/>  
             <DataGridTextColumn Header="Apy To " Binding="{Binding Path=Appr_ToDate,StringFormat={}{0:MM/dd/yyyy}}" Width="70"/>  
             <DataGridTemplateColumn Header="Status" Width="70">  
               <DataGridTemplateColumn.CellTemplate>  
                 <DataTemplate>  
                   <Border x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1">  
                     <TextBlock Text="{Binding Appr_Status}" Margin="3,1" x:Name="txtTextBlock"/>  
                   </Border>  
                   <DataTemplate.Triggers>  
                     <DataTrigger Binding="{Binding Appr_Status}" Value="Pending">  
                       <Setter TargetName="brdBroder" Property="Background" Value="Green"/>  
                       <Setter TargetName="txtTextBlock" Property="Foreground" Value="White"/>  
                     </DataTrigger>  
                   </DataTemplate.Triggers>  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellTemplate>  
             </DataGridTemplateColumn>  
             <DataGridTemplateColumn Header="Apv From" Width="100">  
               <DataGridTemplateColumn.CellTemplate>  
                 <DataTemplate>  
                   <TextBlock Text="{Binding Path=Appr_FromDate, Mode=TwoWay,StringFormat={}{0:MM/dd/yyyy}}" />  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellTemplate>  
               <DataGridTemplateColumn.CellEditingTemplate>  
                 <DataTemplate>  
                   <DatePicker Text="{Binding Path=Appr_FromDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  
                 SelectedDate="{x:Static System:DateTime.Now}" SelectedDateChanged="DatePicker_SelectedDateChanged_1"/>  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellEditingTemplate>  
             </DataGridTemplateColumn>  
             <DataGridTemplateColumn Header="Apv To " Width="100">  
               <DataGridTemplateColumn.CellTemplate>  
                 <DataTemplate>  
                   <TextBlock Text="{Binding Path=Appr_ToDate, Mode=TwoWay,StringFormat={}{0:MM/dd/yyyy}}" />  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellTemplate>  
               <DataGridTemplateColumn.CellEditingTemplate>  
                 <DataTemplate>  
                   <DatePicker Text="{Binding Path=Appr_ToDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  
                 SelectedDate="{x:Static System:DateTime.Now}" SelectedDateChanged="DatePicker_SelectedDateChanged"/>  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellEditingTemplate>  
             </DataGridTemplateColumn>  
             <DataGridTextColumn Header="Apv Day" Binding="{Binding Path=Appr_TotalLeave}" Width="70"/>  
             <DataGridTemplateColumn Header="Action" Width="120">  
               <DataGridTemplateColumn.CellTemplate>  
                 <DataTemplate>  
                   <TextBlock Text="{Binding Path=Appr_Action}"/>  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellTemplate>  
               <DataGridTemplateColumn.CellEditingTemplate>  
                 <DataTemplate>  
                   <ComboBox SelectedItem="{Binding Path=Appr_Action}" Name="cmbLeaveType" ItemsSource="{Binding Source={StaticResource ResourceKey=LeaveApproveActionList}}" Text="Appr_Action"/>  
                 </DataTemplate>  
               </DataGridTemplateColumn.CellEditingTemplate>  
             </DataGridTemplateColumn>  
           </DataGrid.Columns>  
         </DataGrid>  

        

Cast the DataGrid With Class for Get DataGrid Value :

 List<ELeaveApprove> leaveApvList = new List<ELeaveApprove>();  
       for (int i = 0; i < approveDataGrid.Items.Count; i++)  
       {  
         ELeaveApprove eLeaveApproveObj = (ELeaveApprove)approveDataGrid.Items[i];  
         if (eLeaveApproveObj.Appr_Action == "Approve")  
         {  
           leaveApvList.Add(eLeaveApproveObj);  
         }  
         if (eLeaveApproveObj.Appr_Action == "Reject")  
         {  
           leaveApvList.Add(eLeaveApproveObj);  
         }  
       }  


Using leaveApvList you can also filter you datagrid value.






Comments

  1. hey nice one post.....this helped me alot to come out problem.!!
    thanks alot.
    Daewoo Lanos AC Compressor

    ReplyDelete
  2. Please paste the project into your post to better understand your code.

    Greetings.

    User Done.

    ReplyDelete

Post a Comment

Popular posts from this blog

C# run powershell script as administrator

Recently I was fetching a problem that I need to run a PowerShell script that will change TFS user Display name and SID. I was trying to run that script from C# that was not working due to TFS security update and TLS certificate. Using this code block I resolve the Issue. var newProcessInfo = new System.Diagnostics.ProcessStartInfo(); newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; newProcessInfo.Verb = "runas"; // Define Run as administrator newProcessInfo.Arguments = script; //Define your powershell script newProcessInfo.UseShellExecute = false; newProcessInfo.RedirectStandardOutput = true; // This will enable to read Powershell run output newProcessInfo.RedirectStandardError = true; Process proces = System.Diagnostics.Process.Start(newProcessInfo); proces.WaitForExit(); // I want to read the output string from powershell window StringBuilder output = new StringBuilder(); output.Append("Started"); while (!proces.St

ASP.NET MVC razor SAP Crystal report

Crete a new project: Add a aspx Master Page Create a new folder Reports and 2 sub folder crystal & crystalviewer Now add a web form page in crystalviewer  folder. Add the master page namespace in your web form page. MasterPageFile ="~/Views/Shared/ReportSite.Master" Replace your web form by this code < asp : Content ID ="Content1" ContentPlaceHolderID ="ContentPlaceHolder1" runat ="server">      </ asp : Content > Now go to design mode of your web form drag & drop the crystal report viewer in your web form. After that your page will be look look like this. Replace the code: < CR : CrystalReportViewer ID ="EmployeeList" runat ="server"   HasCrystalLogo ="False"     AutoDataBind ="True"   Height ="50px"   EnableParameterPrompt ="false" EnableDatabaseLogonPrompt

mvc razor textboxfor change event change another textboxfor value

Based on value of Weight, Rate , CNF & AWB it will change the value of Freight , TTLCNF anfd TTLFright . Freight= Weight*Rate; TTLCNF  = Weight*CNF; TTLFright=  Freight+ TTLCNF  + AWB; @Html.TextBoxFor(model => model.Weight, new { onChange="return GetWight(this);"}) @Html.TextBoxFor(model => model.Rate, new { onChange="return GetWight(this);"})/Kg @Html.TextBoxFor(model => model.Freight, new {disabled = "disabled" , @readonly = "readonly" ,onChange="return GetTTLFright(this);"}) @Html.TextBoxFor(model => model.CNFPK, new { onChange="return GetCNFPK(this);"}) @Html.TextBoxFor(model => model.TTLCNF, new {disabled = "disabled" , @readonly = "readonly",onChange="return GetTTLFright(this);" }) @Html.TextBoxFor(model => model.AWB, new { onChange="return GetTTLFright(this);"}) and script <script> function GetW