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.
Cast the DataGrid With Class for Get DataGrid Value :
Using leaveApvList you can also filter you datagrid value.
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.
hey nice one post.....this helped me alot to come out problem.!!
ReplyDeletethanks alot.
Daewoo Lanos AC Compressor
Please paste the project into your post to better understand your code.
ReplyDeleteGreetings.
User Done.