Hi,
From the Demo for this pattern of hirarchy
Grid1
Grid2
Grid3
I was able to resolve till 2nd level means till Grid 2.Below I have attached the screen in JEPG.How to get till 3rd level.
My main screen contains list of usecases and then each is break down into features and feature into tasks
Each Usecase has list of features.
Each Feature has list of tasks.
So, I need 3 levels of hirarchy.
My problem is I am not using separate 3 tables which gets resolved if I take Demo example.I am getting everyting in DataContract.Summary.Now how to segregate 3rd one and bind it to xaml
I am getting everything(usecase,feature and task lists) in Summary.xsd which is a typed Data Set and I have used a Summary data contract and filling it.The class diagram I have attached.
Now how to represent that in below xaml
My other issue is I am binding FeatureCollection which is getting repeated in every use case eventhough I have written the filter criteria.
Here is my xaml file:
<
telerik:RadGridView x:Name="RadGridView1" CanUserFreezeColumns="False" GridLinesVisibility="Horizontal" ItemsSource="{Binding Summary.useCaseList}" IsReadOnly="True" AutoGenerateColumns="False">
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition>
<telerik:GridViewTableDefinition.Relation>
<telerik:PropertyRelation ParentPropertyName="Summary.useCaseList" />
</telerik:GridViewTableDefinition.Relation>
</telerik:GridViewTableDefinition>
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding UseCaseNum}" Header="UseCase Number" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding UseCaseName}" Header="UseCase Name" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding UseCaseStatus}" Header="UseCase Status" />
</telerik:RadGridView.Columns>
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<telerik:RadGridView x:Name="RadGridView1" CanUserFreezeColumns="False" AutoGenerateColumns="False" ItemsSource="{Binding FeatureCollection}" ShowGroupPanel="False" IsReadOnly="True">
<telerik:RadGridView.Columns >
<telerik:GridViewDataColumn DataMemberBinding="{Binding FeatureNumber}" Header="Feature Number" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding FeatureStatusName}" Header="Feature StatusName" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
My .cs file is
public static DataContracts.Summary TranslateSummaryXSD(LeMonWeb.Summary summary)
{
DataContracts.Summary summaryObject = null;
IList<DataContracts.Task> taskList = null;
IList<DataContracts.Feature> featureList = null;
IList<DataContracts.UseCase> useCaseList = null;
if (summary != null)
{
summaryObject = new Summary();
featureList=new List<Feature>();
useCaseList=new List<UseCase>();
taskList=new List<Task>();
foreach (LeMonWeb.Summary.UseCaseRow row in summary.Tables[0].Rows)
{
foreach (LeMonWeb.Summary.FeatureRow row1 in summary.Tables[1].Rows)
{
if (row.UseCaseID == row1.UseCaseID)
{
var featureObj = new DataContracts.Feature
{
UseCaseId = row1.UseCaseID,
FeatureNumber = row1.FeatureNumber,
//FeatureDescription = row.FeatureDescription,
FeatureEstimate = row1.FeatureEstimate,
ReviseEstimate = row1.ReviseEstimate,
FeaturePriority = row1.Priority,
FeatureStatusName = row1.FeatureStatus
};
featureList.Add(featureObj);
}
}
var useCaseObj = new DataContracts.UseCase
{
UseCaseNum = row.UseCaseNumber,
UseCaseName = row.UseCaseName,
UseCaseStatus = row.UseCaseStatus,
UseCaseDesc = row.UseCaseDesc,
UseCaseId = row.UseCaseID,
FeatureCollection = featureList,
};
useCaseList.Add(useCaseObj);
}
foreach (LeMonWeb.Summary.TaskRow row in summary.Tables[2].Rows)
{
var taskObj = new DataContracts.Task
{
FeatureID = row.FeatureID,
TaskDesc = row.TaskDesc,
TaskNumber = row.TaskNumber,
TaskStatus = row.TaskStatus,
ActualEffort = row.ActualEffort,
RemainingEffort = row.RemainingEffort,
ResourceName = row.ResourceName,
TaskName = row.TaskName,
ScheduledEffort = row.ScheduledEffort,
//IterationName=row.IterationName,
};
taskList.Add(taskObj);
}
summaryObject.useCaseList = useCaseList;
//summaryObject.feautureList = featureList;
summaryObject.taskList = taskList;
}
return summaryObject;
}
My DataContracts are:
[DataContract(Name = "Feature")]
public class Feature
{
[DataMember]
public int UseCaseId { get; set; }
[DataMember]
public string FeatureNumber { get; set; }
[DataMember]
public string FeatureName { get; set; }
[DataMember]
public string FeatureDescription { get; set; }
[DataMember]
public double FeatureEstimate { get; set; }
[DataMember]
public string ReviseEstimate { get; set; }
[DataMember]
public string FeatureStatusName { get; set; }
[DataMember]
public string FeaturePriority { get; set; }
[DataMember]
public double PercentageCompleted { get; set; }
[DataMember]
public IList<Task> TaskCollection { get; set; }
}
-----------------------------------------------------------------------
[DataContract(Name = "Summary")]
public class Summary
{
//[DataMember]
//public IList<Feature> feautureList { get; set; }
[DataMember]
public IList<UseCase> useCaseList { get; set; }
[DataMember]
public IList<Task> taskList { get; set; }
}
-------------------------------------------------
[DataContract(Name = "UseCase")]
public class UseCase
{
[DataMember]
public int UseCaseId { get; set; }
[DataMember]
public string UseCaseNum { get; set; }
[DataMember]
public string UseCaseName { get; set; }
[DataMember]
public string UseCaseDesc { get; set; }
[DataMember]
public string UseCaseStatus { get; set; }
[DataMember]
public int UseCaseStatusID { get; set; }
[DataMember]
public string UsecaseDetails { get; set; }
[DataMember]
public IList<Feature> FeatureCollection{ get; set; }
}
-------------------------------------
[DataContract(Name = "Task")]
public class Task
{
[DataMember]
public string FeatureNumber { get; set; }
[DataMember]
public int FeatureID { get; set; }
[DataMember]
public string TaskName { get; set; }
[DataMember]
public string TaskDesc { get; set; }
[DataMember]
public double ScheduledEffort { get; set; }
[DataMember]
public double ActualEffort { get; set; }
[DataMember]
public double RemainingEffort { get; set; }
[DataMember]
public string TaskStatus { get; set; }
[DataMember]
public string ResourceName { get; set; }
[DataMember]
public string TaskNumber { get; set; }
[DataMember]
public string IterationName { get; set; }
}