private void ReferenshList() { testInfoModelList = new List <Model.TestInfoModel>(); if (standManager.SelectedItem != null) { if (standManager.SelectedItem.Tag == -1) { Model.TestInfoModel testInfoModel = Stand.StandConfig.GetTestInfoModel(standManager.SelectedItem.StandFileName); if (testInfoModel != null) { testInfoModelList.Add(testInfoModel); } } else { if (standManager.SelectedItem.Stand_Level == 2) { testInfoModelList = Caches.Util.AthTestInfoModelUtil.AthTestUtil(refeBLL.GetStandTestInfoModelList(standManager.SelectedItem.ID)); } } } dgTestInfo.ItemsSource = testInfoModelList; pageAvgCurve.ModelList = testInfoModelList; pageAvgCurve.CurrentStandardInfo = standManager.SelectedItem; pageAvgCurve.UpdateChart(); }
//数据列表单击 private void dgTestInfo_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (dgTestInfo.SelectedIndex >= 0) { foreach (Model.TestInfoModel model in TestInfoModelList) { model.IsChecked = false; } if (dgTestInfo.SelectedItems.Count > 1) { foreach (var item in dgTestInfo.SelectedItems) { Model.TestInfoModel testModel = item as Model.TestInfoModel; testModel.IsChecked = true; } } else { Model.TestInfoModel testModel = dgTestInfo.SelectedItem as Model.TestInfoModel; testModel.IsChecked = true; } RefrenshChart(); } }
public static List <Model.TestInfoModel> AthTestUtil(DataSet ds) { List <Model.TestInfoModel> testInfoModelList = new List <Model.TestInfoModel>(); BLL.TB_TestInfo testInfoBLL = new BLL.TB_TestInfo(); BLL.TB_AthleteInfo athleteInfoBLL = new BLL.TB_AthleteInfo(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataRow dr = ds.Tables[0].Rows[i]; Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Index = i + 1; testInfoBLL.GetModelFromDataRow(dr, testInfoModel); athleteInfoBLL.GetAthleteInfoFromDataRow(dr, testInfoModel); testInfoModel.DGravitycomp = DictCache.GetDictValue(DictCache.Gravitycomp, testInfoModel.Gravitycomp); testInfoModel.DInsuredSide = DictCache.GetDictValue(DictCache.InsuredSide, testInfoModel.InsuredSide); testInfoModel.DJoint = DictCache.GetDictValue(DictCache.Joint, testInfoModel.Joint); testInfoModel.DJointSide = DictCache.GetDictValue(DictCache.JointSide, testInfoModel.Joint_Side); testInfoModel.DTestMode = DictCache.GetDictValue(DictCache.TestMode, testInfoModel.Test_Mode); testInfoModel.DPlane = DictCache.GetDict(testInfoModel.Joint, testInfoModel.Plane, testInfoModel.Test_Mode).Dict_Value; testInfoModelList.Add(testInfoModel); } return(testInfoModelList); }
private DataSeries GetTestSerise(Model.TestInfoModel model, List <double> dataList) { DataSeries ds = null; if (oddTestDataSeriseDict.Keys.Contains(model.TestID)) { return(oddTestDataSeriseDict[model.TestID]); } this.Dispatcher.Invoke(new Action(() => { ds = new DataSeries(); if (!oddTestDataSeriseDict.Keys.Contains(model.TestID)) { DataSeriseUtil.InitLineDataSerise(ds, true, model.Index + model.Ath_Name, null); //ds.LineThickness = 3; DataSeriseUtil.AddDataToDataSerise(ds, dataList); } else { ds = oddTestDataSeriseDict[model.TestID]; } })); return(ds); }
public static List<Model.TestInfoModel> AthTestUtil(DataSet ds) { List<Model.TestInfoModel> testInfoModelList = new List<Model.TestInfoModel>(); BLL.TB_TestInfo testInfoBLL = new BLL.TB_TestInfo(); BLL.TB_AthleteInfo athleteInfoBLL = new BLL.TB_AthleteInfo(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataRow dr = ds.Tables[0].Rows[i]; Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Index = i + 1; testInfoBLL.GetModelFromDataRow(dr, testInfoModel); athleteInfoBLL.GetAthleteInfoFromDataRow(dr, testInfoModel); testInfoModel.DGravitycomp = DictCache.GetDictValue(DictCache.Gravitycomp, testInfoModel.Gravitycomp); testInfoModel.DInsuredSide = DictCache.GetDictValue(DictCache.InsuredSide, testInfoModel.InsuredSide); testInfoModel.DJoint = DictCache.GetDictValue(DictCache.Joint, testInfoModel.Joint); testInfoModel.DJointSide = DictCache.GetDictValue(DictCache.JointSide, testInfoModel.Joint_Side); testInfoModel.DTestMode = DictCache.GetDictValue(DictCache.TestMode, testInfoModel.Test_Mode); testInfoModel.DPlane = DictCache.GetDict(testInfoModel.Joint, testInfoModel.Plane, testInfoModel.Test_Mode).Dict_Value; testInfoModelList.Add(testInfoModel); } return testInfoModelList; }
//刷新数据表 private void RefrenshDataGridSource() { testInfoModelList = new List <Model.TestInfoModel>(); existsIDs += "0"; string sql = "select ath.*,test.*," + "(select dict_value from tb_dict where dict_groupid=3 and dict_key=test.joint_side) as djointside," + "(select dict_value from tb_dict where dict_groupid=1 and dict_key=test.test_mode) as dtestmode," + "(select dict_value from tb_dict where dict_groupid=2 and dict_key=test.joint) as djoint," + "(select dict_value from tb_dict where dict_groupid=(select id from tb_dict where dict_groupid=2 and dict_key=test.joint) and dict_key=test.plane and instr(dict_groupid2,test.test_mode)>0) as dplane," + "(select dict_value from tb_dict where dict_groupid=4 and dict_key=test.InsuredSide) as dInsuredSide," + "(select dict_value from tb_dict where dict_groupid=5 and dict_key=test.Gravitycomp) as dGravitycomp " + "from tb_athleteinfo as ath inner join tb_testinfo as test on ath.id=test.ath_id where 0=0 "; sql += " and test.id in (" + existsIDs + ")"; DataSet ds = DbHelperOleDb.Query(sql); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataRow dr = ds.Tables[0].Rows[i]; Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Index = i + 1; testInfoModel.DGravitycomp = dr["dGravitycomp"].ToString(); testInfoModel.DInsuredSide = dr["dInsuredSide"].ToString(); testInfoModel.DJoint = dr["djoint"].ToString(); testInfoModel.DJointSide = dr["djointside"].ToString(); testInfoModel.DPlane = dr["dplane"].ToString(); testInfoModel.DTestMode = dr["dtestmode"].ToString(); testInfoBLL.GetModelFromDataRow(dr, testInfoModel); athleteInfoBLL.GetAthleteInfoFromDataRow(dr, testInfoModel); testInfoModelList.Add(testInfoModel); } dgTestInfo.ItemsSource = testInfoModelList; lbFileNames.ItemsSource = existsFiles; }
private void StackPanel_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { StackPanel target = (StackPanel)sender; int index = (int)target.Tag; Model.TestInfoModel selectedModel = testInfoModelList.Find(x => x.Index == index); selectedModel.IsChecked = !selectedModel.IsChecked; }
/// <summary> /// /// </summary> private List <Model.TestInfoModel> GetSortedTestInfoModelList() { List <Model.TestInfoModel> models = new List <Model.TestInfoModel>(); foreach (var item in dgTestInfo.Items) { Model.TestInfoModel tim = item as Model.TestInfoModel; //if (tim.IsChecked) { models.Add(tim); //} } return(models); }
private void AddSeriseToChart(Chart c, Model.TestInfoModel model, List <double> dataList) { if (!oddTestDataSeriseDict.Keys.Contains(model.TestID)) { DataSeries ds = new DataSeries(); DataSeriseUtil.InitLineDataSerise(ds, true, model.Index + model.Ath_Name, null); DataSeriseUtil.AddDataToDataSerise(ds, dataList); c.Series.Add(ds); } else { c.Series.Add(oddTestDataSeriseDict[model.TestID]); } }
private void MergeAndAddDS(List <List <XElement> > standList, List <List <XElement> > list, Chart chart) { //合并标准和选择的信息 List <List <XElement> > allList = new List <List <XElement> >(); allList.AddRange(standList); allList.AddRange(list); if (allList.Count > 0) { //把所有曲线计算成相同长度 List <List <double> > allValueList = ComputeAvgCurve.Compute(allList); List <List <double> > standValueList = new List <List <double> >(); List <List <double> > checkedValueList = new List <List <double> >();//选择的测试信息的点列表 //取出标准信息的数据,并创建选择的测试信息的曲线 for (int i = 0; i < allValueList.Count; i++) { if ((i + 1) <= standList.Count) { standValueList.Add(allValueList[i]); } else { checkedValueList.Add(allValueList[i]); Model.TestInfoModel mo = TestInfoModelList[i - standList.Count]; if (mo.IsChecked == true) { string leText = string.Format("{0}.{1}", mo.Index, mo.Ath_Name); chart.Series.Add(CreateSeries(allValueList[i], leText));//补全写入legendtest } } } //添加选择的信息的平均曲线 List <double> checkedInfoAvgValueList = ComputeAvgCurve.ComputeAvg(checkedValueList); DataSeries avgds = CreateSeries(checkedInfoAvgValueList, "平均曲线"); avgds.Color = avgBrush; chart.Series.Add(avgds); //添加标准曲线 if (standValueList.Count > 0) { List <double> avgValueList = ComputeAvgCurve.ComputeAvg(standValueList); DataSeries standds = CreateSeries(avgValueList, stand.SelectedItem.Stand_Name); standds.Color = standBrush; chart.Series.Add(standds); } } }
/// <summary> /// 获取数据文件中的参数信息 /// </summary> /// <param name="testInfoModel">测试信息</param> /// <returns>列表中第一个为动作1的参数信息,第二个为动作2的参数信息</returns> private List <List <XElement> > GetTestDataFileParamValues(Model.TestInfoModel testInfoModel) { List <List <XElement> > lists = new List <List <XElement> >(); List <XElement> oddEleList = new List <XElement>(); //每个测试信息的动作1 的参数节点 List <XElement> evenEleList = new List <XElement>(); //每个测试信息的动作2 的参数节点 XDocument xd = XDocument.Load(Model.AppPath.XmlDataDirPath + testInfoModel.DataFileName); oddEleList.AddRange(xd.Descendants("action1").ElementAt(0).Elements()); evenEleList.AddRange(xd.Descendants("action2").ElementAt(0).Elements()); lists.Add(oddEleList); lists.Add(evenEleList); return(lists); }
private void Window_Loaded(object sender, RoutedEventArgs e) { //重新定义序号 List <Model.TestInfoModel> timList = new List <Model.TestInfoModel>(); for (int i = 0; i < TestInfoModelList.Count; i++) { Model.TestInfoModel tim = (Model.TestInfoModel)TestInfoModelList[i].Clone(); tim.Index = i + 1; timList.Add(tim); } TestInfoModelList = timList; dgTestInfo.ItemsSource = TestInfoModelList; //初始化 stand.ItemSelectionChangedEvent += new Compoments.TestStandardManager.ItemSelectionChangedDelegate(stand_ItemSelectionChangedEvent); tbTitle.Text = "平均曲线对比"; //添加图表 chartOdd.BorderThickness = chartEven.BorderThickness = new Thickness(0, 0, 0, 0); chartOdd.ScrollingEnabled = chartEven.ScrollingEnabled = false; //添加坐标轴 Axis yAxisOAC = new Axis(); Axis yAxisEAC = new Axis(); yAxisOAC.Suffix = yAxisEAC.Suffix = "(Nm)"; chartOdd.AxesY.Add(yAxisOAC); chartEven.AxesY.Add(yAxisEAC); Axis xAxisOAC = new Axis(); Axis xAxisEAC = new Axis(); xAxisEAC.AxisMinimum = xAxisOAC.AxisMinimum = 0; xAxisOAC.AxisMaximum = xAxisEAC.AxisMaximum = 100; xAxisEAC.Suffix = xAxisOAC.Suffix = "%"; chartOdd.AxesX.Add(xAxisOAC); chartEven.AxesX.Add(xAxisEAC); gridOdd.Children.Add(chartOdd); gridEven.Children.Add(chartEven); RefrenshChart(); }
public Model.TestInfoModel GetAvgTestInfoModel(List <Model.TestInfoModel> modelList) { Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Ath_Name = string.Format("{0}人", modelList.Count); testInfoModel.BaseFileName = "-"; testInfoModel.TestDate = testInfoModel.TestTime = DateTime.MinValue; foreach (var item in modelList) { if (DateTime.Compare(item.TestDate, testInfoModel.TestDate) == 1) { testInfoModel.TestDate = testInfoModel.TestTime = item.TestDate; } } var jointSide = modelList.GroupBy(x => x.Joint_Side); foreach (var jointSideList in jointSide) { testInfoModel.DJointSide += string.Format("{0}({1}),", jointSideList.ElementAt(0).DJointSide, jointSideList.Count()); } testInfoModel.DJointSide = testInfoModel.DJointSide.Substring(0, testInfoModel.DJointSide.Length - 1); var testModeGroupList = modelList.GroupBy(x => x.Test_Mode); foreach (var testModeList in testModeGroupList) { testInfoModel.DTestMode += string.Format("{0}({1}),", testModeList.ElementAt(0).DTestMode, testModeList.Count()); } testInfoModel.DTestMode = testInfoModel.DTestMode.Substring(0, testInfoModel.DTestMode.Length - 1); var jointGroupList = modelList.GroupBy(x => x.Joint); foreach (var jointList in jointGroupList) { testInfoModel.DJoint += string.Format("{0}({1}),", jointList.ElementAt(0).DJoint, jointList.Count()); } testInfoModel.DJoint = testInfoModel.DJoint.Substring(0, testInfoModel.DJoint.Length - 1); var planeGroupList = modelList.GroupBy(x => x.Plane); foreach (var planeList in planeGroupList) { testInfoModel.DPlane += string.Format("{0}({1}),", planeList.ElementAt(0).DPlane, planeList.Count()); } testInfoModel.DPlane = testInfoModel.DPlane.Substring(0, testInfoModel.DPlane.Length - 1); return(testInfoModel); }
public void GetModelFromDataRow(DataRow dr, Model.TestInfoModel model) { if (dr["test.ID"].ToString() != "") { model.TestID = int.Parse(dr["test.ID"].ToString()); } if (dr["Ath_ID"].ToString() != "") { model.Ath_ID = int.Parse(dr["Ath_ID"].ToString()); } if (dr["TestDate"].ToString() != "") { model.TestDate = DateTime.Parse(dr["TestDate"].ToString()); } if (dr["TestTime"].ToString() != "") { model.TestTime = DateTime.Parse(dr["TestTime"].ToString()); } model.Joint_Side = dr["Joint_Side"].ToString(); model.Test_Mode = dr["Test_Mode"].ToString(); model.Joint = dr["Joint"].ToString(); model.Plane = dr["Plane"].ToString(); model.Motion_Start = dr["Motion_Start"].ToString(); model.Motion_End = dr["Motion_End"].ToString(); model.Speed1 = dr["Speed1"].ToString(); model.Speed2 = dr["Speed2"].ToString(); model.Acceleration1 = dr["Acceleration1"].ToString(); model.Acceleration2 = dr["Acceleration2"].ToString(); model.Break = dr["Break"].ToString(); model.NOOfSets = dr["NOOfSets"].ToString(); model.NOOfRepetitions = dr["NOOfRepetitions"].ToString(); string insuredSide = dr["InsuredSide"].ToString(); model.InsuredSide = insuredSide.Equals("") ? "2" : insuredSide; string gracomp = dr["Gravitycomp"].ToString(); model.Gravitycomp = gracomp.Equals("") ? "0" : gracomp; model.Therapist = dr["Therapist"].ToString(); model.BaseFileName = dr["BaseFileName"].ToString(); model.DataFileName = dr["DataFileName"].ToString(); model.Remark = dr["remark"].ToString(); model.ActionID = dr["actionid"].ToString(); }
public Model.TestInfoModel GetAvgTestInfoModel(List<Model.TestInfoModel> modelList) { Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Ath_Name = string.Format("{0}人", modelList.Count); testInfoModel.BaseFileName = "-"; testInfoModel.TestDate = testInfoModel.TestTime = DateTime.MinValue; foreach (var item in modelList) { if (DateTime.Compare(item.TestDate,testInfoModel.TestDate)==1) { testInfoModel.TestDate = testInfoModel.TestTime = item.TestDate; } } var jointSide = modelList.GroupBy(x => x.Joint_Side); foreach (var jointSideList in jointSide) { testInfoModel.DJointSide += string.Format("{0}({1}),", jointSideList.ElementAt(0).DJointSide, jointSideList.Count()); } testInfoModel.DJointSide = testInfoModel.DJointSide.Substring(0, testInfoModel.DJointSide.Length - 1); var testModeGroupList = modelList.GroupBy(x => x.Test_Mode); foreach (var testModeList in testModeGroupList) { testInfoModel.DTestMode += string.Format("{0}({1}),", testModeList.ElementAt(0).DTestMode, testModeList.Count()); } testInfoModel.DTestMode = testInfoModel.DTestMode.Substring(0, testInfoModel.DTestMode.Length - 1); var jointGroupList = modelList.GroupBy(x=>x.Joint); foreach (var jointList in jointGroupList) { testInfoModel.DJoint += string.Format("{0}({1}),", jointList.ElementAt(0).DJoint, jointList.Count()); } testInfoModel.DJoint = testInfoModel.DJoint.Substring(0, testInfoModel.DJoint.Length - 1); var planeGroupList = modelList.GroupBy(x => x.Plane); foreach (var planeList in planeGroupList) { testInfoModel.DPlane += string.Format("{0}({1}),", planeList.ElementAt(0).DPlane, planeList.Count()); } testInfoModel.DPlane = testInfoModel.DPlane.Substring(0, testInfoModel.DPlane.Length - 1); return testInfoModel; }
public void GetAthleteInfoFromDataRow(DataRow dr, Model.TestInfoModel model) { if (dr["ath.ID"].ToString() != "") { model.AthID = int.Parse(dr["ath.ID"].ToString()); } model.Ath_Code = dr["Ath_Code"].ToString(); model.Ath_Name = dr["Ath_Name"].ToString(); model.Ath_PinYin = dr["Ath_PinYin"].ToString(); model.Ath_Sex = dr["Ath_Sex"].ToString(); if (dr["Ath_Birthday"].ToString() != "") { model.Ath_Birthday = DateTime.Parse(dr["Ath_Birthday"].ToString()); } model.Ath_Height = dr["Ath_Height"].ToString(); model.Ath_Weight = dr["Ath_Weight"].ToString(); model.Ath_Project = dr["Ath_Project"].ToString(); model.Ath_MainProject = dr["Ath_MainProject"].ToString(); model.Ath_TrainYears = dr["Ath_TrainYears"].ToString(); model.Ath_Level = dr["Ath_Level"].ToString(); model.Ath_Team = dr["Ath_Team"].ToString(); if (dr["Ath_TestDate"].ToString() != "") { model.Ath_TestDate = DateTime.Parse(dr["Ath_TestDate"].ToString()); } model.Ath_TestAddress = dr["Ath_TestAddress"].ToString(); model.Ath_TestMachine = dr["Ath_TestMachine"].ToString(); model.Ath_TestState = dr["Ath_TestState"].ToString(); model.Ath_Remark = dr["Ath_Remark"].ToString(); if (dr["Ath_TestID"].ToString() != "") { model.Ath_TestID = int.Parse(dr["Ath_TestID"].ToString()); } if (dr["hidden"].ToString() != "0" && !TB_Setting.IsShowAllData) { model.Ath_Name = ""; } }
private void CheckChanged() { if (dgTestInfo.SelectedIndex >= 0) { foreach (Model.TestInfoModel model in testInfoModelList) { model.IsChecked = false; } if (dgTestInfo.SelectedItems.Count > 1) { foreach (var item in dgTestInfo.SelectedItems) { Model.TestInfoModel testModel = item as Model.TestInfoModel; testModel.IsChecked = true; } } else { Model.TestInfoModel testModel = dgTestInfo.SelectedItem as Model.TestInfoModel; testModel.IsChecked = true; } } }
public XDocument Generate() { XDocument doc = new XDocument();//生成的xml文档 XElement rootEle = new XElement("root"); doc.Add(rootEle); XDocument reportDoc = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "\\AppTemplate\\CompareResportTempalte.xml"); //文档模板 XElement titleEle = reportDoc.Descendants("title").ElementAt <XElement>(0); //设置title节点 titleEle.Value = title; rootEle.Add(titleEle); //添加testinfotable ,comparetable节点 XElement titableXEle = new XElement("testinfotable"); rootEle.Add(titableXEle); XElement cmptableXEle = new XElement("comparetable"); rootEle.Add(cmptableXEle); XElement testinfotableXEle = reportDoc.Descendants("testinfotable").ElementAt <XElement>(0); //testinfotable节点 XElement testInfoEle = testinfotableXEle.Element("table"); IEnumerable <XElement> tableEles = reportDoc.Descendants("table"); //table节点列表,第一个为测试信息表格,第二个为参数信息表格 List <XElement> oddEleList = new List <XElement>(); //每个测试信息的动作1 的参数节点 List <XElement> evenEleList = new List <XElement>(); //每个测试信息的动作2 的参数节点 for (int i = 0; i < TestInfoModelList.Count; i++) { Model.TestInfoModel infoModel = TestInfoModelList[i]; XDocument xd = XDocument.Load(Model.AppPath.XmlDataDirPath + infoModel.DataFileName); oddEleList.AddRange(xd.Descendants("action1").ElementAt(0).Elements()); evenEleList.AddRange(xd.Descendants("action2").ElementAt(0).Elements()); #region 创建测试信息表格 testInfoEle.Attribute("remark").Value = (i + 1) + "、受试者:" + infoModel.Ath_Name; IEnumerable <XElement> testInfoCells = testInfoEle.Descendants("cell"); testInfoCells.ElementAt(0).Attribute("value").Value = infoModel.Ath_TestAddress; testInfoCells.ElementAt(1).Attribute("value").Value = infoModel.Ath_TestState; testInfoCells.ElementAt(2).Attribute("value").Value = infoModel.Ath_TestDate.ToString("yyyy年MM月dd"); testInfoCells.ElementAt(3).Attribute("value").Value = infoModel.DJoint; testInfoCells.ElementAt(4).Attribute("value").Value = infoModel.DJointSide; testInfoCells.ElementAt(5).Attribute("value").Value = infoModel.DTestMode; testInfoCells.ElementAt(6).Attribute("value").Value = infoModel.DPlane; testInfoCells.ElementAt(7).Attribute("value").Value = infoModel.MotionRange; testInfoCells.ElementAt(8).Attribute("value").Value = infoModel.Speed; testInfoCells.ElementAt(9).Attribute("value").Value = infoModel.Break; testInfoCells.ElementAt(10).Attribute("value").Value = infoModel.NOOfSets; testInfoCells.ElementAt(11).Attribute("value").Value = infoModel.NOOfRepetitions; testInfoCells.ElementAt(12).Attribute("value").Value = infoModel.Ath_Remark; //rootEle.Add(testInfoEle);//添加测试信息 titableXEle.Add(testInfoEle); #endregion } XElement paramsTableEle = tableEles.ElementAt <XElement>(1); IEnumerable <XElement> rowEles = paramsTableEle.Descendants("row"); for (int i = 3; i < rowEles.Count(); i++) { int paramIndex = i - 3; //参数名称索引 string ac1max = ""; //动作1最大值平均 string ac1avg = ""; //动作1平均值平均 string ac2max = ""; //动作2最大值平均 string ac2avg = ""; //动作2平均值平均 //动作1最大值平均 List <XElement> ac1maxNoEmptyEleList = oddEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("max").Value != "").ToList <XElement>(); if (ac1maxNoEmptyEleList.Count > 0) { ac1max = Math.Round(ac1maxNoEmptyEleList.Average(x => double.Parse(x.Attribute("max").Value)), 2).ToString(); } //动作1平均值平均 List <XElement> ac1avgNoEmptyEleList = oddEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("avg").Value != "").ToList <XElement>(); if (ac1avgNoEmptyEleList.Count > 0) { ac1avg = Math.Round(ac1avgNoEmptyEleList.Average(x => double.Parse(x.Attribute("avg").Value)), 2).ToString(); } //动作2最大值平均 List <XElement> ac2maxNoEmptyEleList = evenEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("max").Value != "").ToList <XElement>(); if (ac2maxNoEmptyEleList.Count > 0) { ac2max = Math.Round(ac2maxNoEmptyEleList.Average(x => double.Parse(x.Attribute("max").Value)), 2).ToString(); } //动作2平均值平均 List <XElement> ac2avgNoEmptyEleList = evenEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("avg").Value != "").ToList <XElement>(); if (ac2avgNoEmptyEleList.Count > 0) { ac2avg = Math.Round(ac2avgNoEmptyEleList.Average(x => double.Parse(x.Attribute("avg").Value)), 2).ToString(); } IEnumerable <XElement> cellEles = rowEles.ElementAt(i).Elements(); cellEles.ElementAt(1).Attribute("label").Value = ac1max; cellEles.ElementAt(2).Attribute("label").Value = ac1avg; cellEles.ElementAt(3).Attribute("label").Value = ac2max; cellEles.ElementAt(4).Attribute("label").Value = ac2avg; } rootEle.Add(paramsTableEle);//添加平均参数信息 return(doc); }
//刷新数据表 private void RefrenshDataGridSource() { testInfoModelList = new List<Model.TestInfoModel>(); existsIDs += "0"; string sql = "select ath.*,test.*," + "(select dict_value from tb_dict where dict_groupid=3 and dict_key=test.joint_side) as djointside," + "(select dict_value from tb_dict where dict_groupid=1 and dict_key=test.test_mode) as dtestmode," + "(select dict_value from tb_dict where dict_groupid=2 and dict_key=test.joint) as djoint," + "(select dict_value from tb_dict where dict_groupid=(select id from tb_dict where dict_groupid=2 and dict_key=test.joint) and dict_key=test.plane and instr(dict_groupid2,test.test_mode)>0) as dplane," + "(select dict_value from tb_dict where dict_groupid=4 and dict_key=test.InsuredSide) as dInsuredSide," + "(select dict_value from tb_dict where dict_groupid=5 and dict_key=test.Gravitycomp) as dGravitycomp " + "from tb_athleteinfo as ath inner join tb_testinfo as test on ath.id=test.ath_id where 0=0 "; sql += " and test.id in ("+existsIDs+")"; DataSet ds = DbHelperOleDb.Query(sql); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataRow dr = ds.Tables[0].Rows[i]; Model.TestInfoModel testInfoModel = new Model.TestInfoModel(); testInfoModel.Index = i + 1; testInfoModel.DGravitycomp = dr["dGravitycomp"].ToString(); testInfoModel.DInsuredSide = dr["dInsuredSide"].ToString(); testInfoModel.DJoint = dr["djoint"].ToString(); testInfoModel.DJointSide = dr["djointside"].ToString(); testInfoModel.DPlane = dr["dplane"].ToString(); testInfoModel.DTestMode = dr["dtestmode"].ToString(); testInfoBLL.GetModelFromDataRow(dr, testInfoModel); athleteInfoBLL.GetAthleteInfoFromDataRow(dr, testInfoModel); testInfoModelList.Add(testInfoModel); } dgTestInfo.ItemsSource = testInfoModelList; lbFileNames.ItemsSource = existsFiles; }
int gap2Count = 2; //动作2对比前的row节点个数 /// <summary> /// 生成报告数据的xml文档 /// </summary> /// <returns></returns> public XDocument GenerateXDoc() { XDocument doc = new XDocument();//生成的xml文档 XElement rootEle = new XElement("root"); doc.Add(rootEle); XElement titleEle = new XElement("title"); titleEle.Value = title; rootEle.Add(titleEle); //添加testinfotable ,comparetable节点 XElement titableXEle = new XElement("testinfotable"); rootEle.Add(titableXEle); XElement cmptableXEle = new XElement("comparetable"); rootEle.Add(cmptableXEle); //从模板中获取测试信息table和对比table节点模板 XDocument templateDoc = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "\\AppTemplate\\CompareResportTempalte.xml"); //文档模板 IEnumerable <XElement> tableEles = templateDoc.Descendants("table"); XElement testinfotableXEle = tableEles.ElementAt <XElement>(0); //testinfotable节点 XElement comparetableXEle = tableEles.ElementAt <XElement>(1); //comparetableXEle节点 //写入对比信息 switch (exportMode) { case ExportModeEnum.Mode1: //导出互相或与平均值的对比 if (checkedTestInfoModelList.Count != 2) { throw new Exception("仅当选择的数据条目数量为两条时,才能导出互相对比报告!"); } List <List <XElement> > t1Params = GetTestDataFileParamValues(checkedTestInfoModelList[0]); //第一个测试信息的参数信息 List <List <XElement> > t2Params = GetTestDataFileParamValues(checkedTestInfoModelList[1]); //第二个测试信息的参数信息 XElement xe = GetCompareTable(comparetableXEle, "1、" + checkedTestInfoModelList[0].Ath_Name, "2、" + checkedTestInfoModelList[1].Ath_Name, t1Params, t2Params); xe.Attribute("remark").Value = "1、" + checkedTestInfoModelList[0].Ath_Name + "与2、" + checkedTestInfoModelList[1].Ath_Name + "的对比信息"; cmptableXEle.Add(xe); break; case ExportModeEnum.Mode2: if (checkedTestInfoModelList.Count < 1) { throw new Exception("请至少选择一条测试数据!"); } List <List <XElement> > avgParam = ComputeAvg(TestInfoModelList); string avgtitle = "多条平均"; for (int i = 0; i < checkedTestInfoModelList.Count; i++) { List <List <XElement> > tiParam = GetTestDataFileParamValues(checkedTestInfoModelList[i]); XElement xe1 = GetCompareTable(comparetableXEle, (i + 1) + "、" + checkedTestInfoModelList[i].Ath_Name, avgtitle, tiParam, avgParam); xe1.Attribute("remark").Value = (i + 1) + "、" + checkedTestInfoModelList[i].Ath_Name + "与平均曲线的对比信息"; cmptableXEle.Add(xe1); } break; case ExportModeEnum.Mode3: //导出与参考值的对比 if (checkedTestInfoModelList.Count < 1) { throw new Exception("请至少选择一条测试数据!"); } if (StandardTestInfoModelList.Count <= 0) { throw new Exception("该测试参考值没有测试信息,无法导出与参考值对比的报告!"); } else { List <List <XElement> > standParam = ComputeAvg(StandardTestInfoModelList); for (int i = 0; i < checkedTestInfoModelList.Count; i++) { List <List <XElement> > tiParam = GetTestDataFileParamValues(checkedTestInfoModelList[i]); XElement xe2 = GetCompareTable(comparetableXEle, (i + 1) + "、" + checkedTestInfoModelList[i].Ath_Name, "参考值", tiParam, standParam); xe2.Attribute("remark").Value = (i + 1) + "、" + checkedTestInfoModelList[i].Ath_Name + "与测试参考值" + StandName + "的对比信息"; cmptableXEle.Add(xe2); } } break; } #region 写入测试信息 for (int i = 0; i < checkedTestInfoModelList.Count; i++) { Model.TestInfoModel infoModel = checkedTestInfoModelList[i]; testinfotableXEle.Attribute("remark").Value = (i + 1) + "、受试者:" + infoModel.Ath_Name; IEnumerable <XElement> testInfoCells = testinfotableXEle.Descendants("cell"); testInfoCells.ElementAt(0).Attribute("value").Value = infoModel.Ath_TestAddress; testInfoCells.ElementAt(1).Attribute("value").Value = infoModel.Ath_TestState; testInfoCells.ElementAt(2).Attribute("value").Value = infoModel.Ath_TestDate.ToString("yyyy年MM月dd"); testInfoCells.ElementAt(3).Attribute("value").Value = infoModel.DJoint; testInfoCells.ElementAt(4).Attribute("value").Value = infoModel.DJointSide; testInfoCells.ElementAt(5).Attribute("value").Value = infoModel.DTestMode; testInfoCells.ElementAt(6).Attribute("value").Value = infoModel.DPlane; testInfoCells.ElementAt(7).Attribute("value").Value = infoModel.MotionRange; testInfoCells.ElementAt(8).Attribute("value").Value = infoModel.Speed; testInfoCells.ElementAt(9).Attribute("value").Value = infoModel.Break; testInfoCells.ElementAt(10).Attribute("value").Value = infoModel.NOOfSets; testInfoCells.ElementAt(11).Attribute("value").Value = infoModel.NOOfRepetitions; testInfoCells.ElementAt(12).Attribute("value").Value = infoModel.Ath_Remark; titableXEle.Add(testinfotableXEle); } #endregion return(doc); }
private void btnExport_Click(object sender, RoutedEventArgs e) { List <Model.TB_StandardInfo> checkedStandList = GetCheckedStand(); if (checkedStandList.Count == 0) { DSJL.Tools.MessageBoxTool.ShowConfirmMsgBox("请选择要导出的测试参考值!"); return; } if (DSJL.Tools.ShowFileDialogTool.ShowSaveFileDialog(out exportPath, "", "dsf", "等速肌力参考值导出") == false) { return; } exportPath = exportPath.Substring(0, exportPath.LastIndexOf("\\") + 1); Console.WriteLine("export path is:{0}", exportPath); ProgressWindow window = new ProgressWindow(); window.WindowTilte = "导出参考值进度"; window.MaxValue = checkedStandList.Count; window.MinValue = 0; window.CancleMessage = "确定取消导出吗?"; window.onCancling += Window_onCancling; window.Owner = this; Task task = new Task(() => { int progress = 0; foreach (var item in checkedStandList) { if (isCancleExport) { break; } //1、查询测试信息 List <Model.TestInfoModel> testInfoModelList = Caches.Util.AthTestInfoModelUtil.AthTestUtil(refeBLL.GetStandTestInfoModelList(item.ID)); if (testInfoModelList.Count == 0) { continue; } Model.TestInfoModel avgTestInfoModel = GetAvgTestInfoModel(testInfoModelList); string testInfoModelJson = Newtonsoft.Json.JsonConvert.SerializeObject(avgTestInfoModel); // Console.WriteLine(testInfoModelJson); //2、计算平均值 List <List <XElement> > paramList = DSJL.Export.GenerateCompareResportXml.ComputeAvg(testInfoModelList); string paramJson = Newtonsoft.Json.JsonConvert.SerializeObject(paramList); // Console.WriteLine(paramJson); Dictionary <DataPointsType, List <List <double> > > dataPointsDict = StandardChartCache.GetStandardDataPoints(item, testInfoModelList); List <List <double> > oddavgsd = dataPointsDict[DataPointsType.ODDAvgSD]; List <List <double> > evenavgsd = dataPointsDict[DataPointsType.EVENAVGSD]; string oddavgsdjson = Newtonsoft.Json.JsonConvert.SerializeObject(oddavgsd); string evenavgsdjson = Newtonsoft.Json.JsonConvert.SerializeObject(evenavgsd); // Console.WriteLine(oddavgsdjson); // Console.WriteLine(evenavgsdjson); //3、写入文件 Model.TB_StandardInfo parentStandModel = standList.Find(x => x.ID == item.Stand_ParentID); Model.ExportStandModel exportStandModel = new Model.ExportStandModel(); exportStandModel.ParentName = parentStandModel.Stand_Name; exportStandModel.StandName = item.Stand_Name; exportStandModel.TestModel = avgTestInfoModel; exportStandModel.ParamList = paramList; exportStandModel.OddAvgSD = oddavgsd; exportStandModel.EvenAvgSD = evenavgsd; string standJson = Newtonsoft.Json.JsonConvert.SerializeObject(exportStandModel); standJson = DSJL.Tools.DES.Encrypt(standJson, "cissdsjl"); string filename = string.Format("{0}{1}.dsf", exportPath, item.Stand_Name); StreamWriter sw = new StreamWriter(filename); sw.Write(standJson); sw.Close(); progress++; Dispatcher.BeginInvoke(new Action(() => { window.CurrentValue = progress; })); } DSJL.Tools.MessageBoxTool.ShowConfirmMsgBox("导出完成!"); Dispatcher.BeginInvoke(new Action(() => { window.Close(); this.Close(); })); }); task.Start(); window.ShowDialog(); }
private void btnExport_Click(object sender, RoutedEventArgs e) { exportProgress.Minimum = 0; exportProgress.Maximum = TestInfoList.Count; exportProgress.Value = 0; double value = 0; UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(exportProgress.SetValue); try { excelApp = new ApplicationClass(); Workbooks myWorkBooks = excelApp.Workbooks; myWorkBooks.Open(templatePath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); Sheets sheets = excelApp.Sheets; mySheet1 = (Worksheet)sheets[1]; mySheet1.Activate(); int rowCount = TestInfoList.Count + 2;; //总行数 //写入参数信息 int paramCount = 0;//参数行数 if (IsExportParams) { paramCount = ParamList.Count * 4; for (int i = 0; i < ParamList.Count; i++) { Model.Parameter p = ParamList[i]; Range r = mySheet1.get_Range(mySheet1.Cells[1, testInfoColumnCount + i * 4 + 1], mySheet1.Cells[1, testInfoColumnCount + i * 4 + 4]); r.Merge(); r.Value = p.ParamName; r.Font.Bold = true; r.HorizontalAlignment = XlHAlign.xlHAlignCenter; r.VerticalAlignment = XlHAlign.xlHAlignCenter; Range r1 = mySheet1.get_Range(mySheet1.Cells[2, testInfoColumnCount + i * 4 + 1], mySheet1.Cells[2, testInfoColumnCount + i * 4 + 4]); r1.Value2 = paramContents; r1.Font.Bold = true; r1.EntireColumn.AutoFit(); } } //写入测试信息 string[,] content = new string[rowCount, testInfoColumnCount + paramCount]; //double?[,] paramContent = new double?[rowCount, paramCount]; XDocument xdoc; BLL.TB_Dict dictBLL = new BLL.TB_Dict(); for (int i = 0; i < TestInfoList.Count; i++) { int rowIndex = i; Model.TestInfoModel model = TestInfoList[i]; content[rowIndex, 0] = string.Format("测试{0}", i + 1); //测试顺序 content[rowIndex, 1] = model.Ath_Name; //姓名 content[rowIndex, 2] = model.TestDate.ToString("yyyy-MM-dd HH:mm"); //测试日期 content[rowIndex, 3] = model.DJoint; //测试关节 content[rowIndex, 4] = model.DJointSide; //测试侧 content[rowIndex, 5] = model.DPlane; //运动方式 content[rowIndex, 6] = model.DTestMode; //测试模式 content[rowIndex, 7] = model.MotionRange; //运动范围 content[rowIndex, 8] = model.Speed; //测试速度 content[rowIndex, 9] = model.Break; //休息时间 content[rowIndex, 10] = model.NOOfSets; //测试组数 content[rowIndex, 11] = model.NOOfRepetitions; //重复次数 content[rowIndex, 12] = model.DInsuredSide; //受伤测 content[rowIndex, 13] = model.DGravitycomp; //重力补偿 if (IsExportParams) { string xmlPath = Model.AppPath.XmlDataDirPath + model.DataFileName; xdoc = XDocument.Load(xmlPath); List <XElement> action1 = xdoc.Descendants("action1").Elements <XElement>().ToList <XElement>(); List <XElement> action2 = xdoc.Descendants("action2").Elements <XElement>().ToList <XElement>(); for (int j = 0; j < ParamList.Count; j++) { int paramOneColumnIndex = j * 4; double p1; if (double.TryParse(action1[ParamList[j].Index].Attribute("max").Value, out p1)) { //paramContent[rowIndex, paramOneColumnIndex] = p1; mySheet1.Cells[rowIndex + 3, paramOneColumnIndex + testInfoColumnCount + 1] = p1; } double p2; if (double.TryParse(action1[ParamList[j].Index].Attribute("avg").Value, out p2)) { //paramContent[rowIndex, paramOneColumnIndex + 1] = p2; mySheet1.Cells[rowIndex + 3, paramOneColumnIndex + testInfoColumnCount + 2] = p2; } double p3; if (double.TryParse(action2[ParamList[j].Index].Attribute("max").Value, out p3)) { //paramContent[rowIndex, paramOneColumnIndex + 2] = p3; mySheet1.Cells[rowIndex + 3, paramOneColumnIndex + testInfoColumnCount + 3] = p3; } double p4; if (double.TryParse(action2[ParamList[j].Index].Attribute("avg").Value, out p4)) { //paramContent[rowIndex, paramOneColumnIndex + 3] = p4; mySheet1.Cells[rowIndex + 3, paramOneColumnIndex + testInfoColumnCount + 4] = p4; } } } //写进度条 value += 1; Dispatcher.Invoke(updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { ProgressBar.ValueProperty, value }); } //写入测试信息 Range range1 = mySheet1.get_Range(mySheet1.Cells[3, 1], mySheet1.Cells[rowCount, testInfoColumnCount]); range1.Value2 = content; //写入参数信息 //Range range2 = mySheet1.get_Range(mySheet1.Cells[3, testInfoColumnCount + 1], mySheet1.Cells[rowCount, testInfoColumnCount + paramCount]); //range2.Value2 = paramContent; //if (IsExportParams) //{ // rowCount = TestInfoList.Count + (ParamList.Count + 1) * TestInfoList.Count + 1;//信息行数+信息行数×参数行数+第一行列头信息 // paramCount = ParamList.Count + 1;//参数行数加1行参数名 //} //else { // rowCount = TestInfoList.Count + 1; //} //string[,] content = new string[rowCount, 13]; //XDocument xdoc; //Model.TB_Dict actionModel; //BLL.TB_Dict dictBLL = new BLL.TB_Dict(); //for (int i = 0; i < TestInfoList.Count; i++) { // int rowIndex = i + i * paramCount; // Model.TestInfoModel model = TestInfoList[i]; // content[rowIndex, 0] = model.Ath_Name;//姓名 // content[rowIndex, 1] = model.TestDate.ToString("yyyy-MM-dd HH:mm");//测试日期 // content[rowIndex, 2] = model.DJoint;//测试关节 // content[rowIndex, 3] = model.DJointSide;//测试侧 // content[rowIndex, 4] = model.DPlane;//运动方式 // content[rowIndex, 5] = model.DTestMode;//测试模式 // content[rowIndex, 6] = model.MotionRange;//运动范围 // content[rowIndex, 7] = model.Speed;//测试速度 // content[rowIndex, 8] = model.Break;//休息时间 // content[rowIndex, 9] = model.NOOfSets;//测试组数 // content[rowIndex, 10] = model.NOOfRepetitions;//重复次数 // content[rowIndex, 11] = model.DInsuredSide;//受伤测 // content[rowIndex, 12] = model.DGravitycomp;//重力补偿 // if (IsExportParams) { // //写入参数信息 // actionModel = dictBLL.GetModel(model.Joint, model.Plane, model.Test_Mode); // content[rowIndex + 1, 0] = "所选测试顺序"; // content[rowIndex + 1, 1] = "参数"; // content[rowIndex + 1, 2] = actionModel.actionone + "(极值)"; // content[rowIndex + 1, 3] = actionModel.actionone + "(平均值)"; // content[rowIndex + 1, 4] = actionModel.actiontwo + "(极值)"; // content[rowIndex + 1, 5] = actionModel.actiontwo + "(平均值)"; // string xmlPath = Model.AppPath.XmlDataDirPath + model.DataFileName; // xdoc = XDocument.Load(xmlPath); // List<XElement> action1 = xdoc.Descendants("action1").Elements<XElement>().ToList<XElement>(); // List<XElement> action2 = xdoc.Descendants("action2").Elements<XElement>().ToList<XElement>(); // for (int j = 0; j < ParamList.Count; j++) // { // content[rowIndex + 1 + j + 1, 0] = "测试" + (i + 1); // content[rowIndex + 1 + j + 1, 1] = ParamList[j].ParamName; // content[rowIndex + 1 + j + 1, 2] = action1[ParamList[j].Index].Attribute("max").Value; // content[rowIndex + 1 + j + 1, 3] = action1[ParamList[j].Index].Attribute("avg").Value; // content[rowIndex + 1 + j + 1, 4] = action2[ParamList[j].Index].Attribute("max").Value; // content[rowIndex + 1 + j + 1, 5] = action2[ParamList[j].Index].Attribute("avg").Value; // } // } // //写进度条 // value += 1; // Dispatcher.Invoke(updatePbDelegate, // System.Windows.Threading.DispatcherPriority.Background, // new object[] { ProgressBar.ValueProperty, value }); //} //Range range = mySheet1.get_Range(mySheet1.Cells[2, 1], mySheet1.Cells[rowCount, 13]); //range.Value2 = content; mySheet1.SaveAs(choosePath, missing, missing, missing, missing, missing, missing, missing, missing, missing); myWorkBooks.Close(); excelApp.Quit(); MessageBox.Show("导出成功!", "系统信息"); System.Windows.Window.GetWindow(this).Close(); } catch (Exception ee) { MessageBox.Show("导出出错!\r\n错误信息为:" + ee.Message, "系统错误"); } }
public static Model.TestData.TestData GetTestDataByFileName(Model.TestInfoModel model) { return(GetTestDataByFileName(model.DataFileName)); }
public static List <List <XElement> > ComputeAvg(List <Model.TestInfoModel> modelList) { var groupedModelList = modelList.GroupBy(x => x.Ath_ID); List <XElement> oddEleList = new List <XElement>(); //每个测试信息的动作1 的参数节点 List <XElement> evenEleList = new List <XElement>(); //每个测试信息的动作2 的参数节点 for (int i = 0; i < modelList.Count; i++) { Model.TestInfoModel infoModel = modelList[i]; XDocument xd = XDocument.Load(Model.AppPath.XmlDataDirPath + infoModel.DataFileName); oddEleList.AddRange(xd.Descendants("action1").ElementAt(0).Elements()); evenEleList.AddRange(xd.Descendants("action2").ElementAt(0).Elements()); } List <XElement> list1 = new List <XElement>(); List <XElement> list2 = new List <XElement>(); for (int i = 0; i < paramNameList.Count; i++) { int paramIndex = i; //参数名称索引 string ac1max = ""; //动作1最大值平均 string ac1avg = ""; //动作1平均值平均 string ac2max = ""; //动作2最大值平均 string ac2avg = ""; //动作2平均值平均 //动作1最大值平均 List <XElement> ac1maxNoEmptyEleList = oddEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("max").Value != "").ToList <XElement>(); if (ac1maxNoEmptyEleList.Count > 0) { ac1max = Math.Round(ac1maxNoEmptyEleList.Average(x => double.Parse(x.Attribute("max").Value)), 2).ToString(); } //动作1平均值平均 List <XElement> ac1avgNoEmptyEleList = oddEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("avg").Value != "").ToList <XElement>(); if (ac1avgNoEmptyEleList.Count > 0) { ac1avg = Math.Round(ac1avgNoEmptyEleList.Average(x => double.Parse(x.Attribute("avg").Value)), 2).ToString(); } //动作2最大值平均 List <XElement> ac2maxNoEmptyEleList = evenEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("max").Value != "").ToList <XElement>(); if (ac2maxNoEmptyEleList.Count > 0) { ac2max = Math.Round(ac2maxNoEmptyEleList.Average(x => double.Parse(x.Attribute("max").Value)), 2).ToString(); } //动作2平均值平均 List <XElement> ac2avgNoEmptyEleList = evenEleList.Where(x => x.Name == paramNameList[paramIndex] && x.Attribute("avg").Value != "").ToList <XElement>(); if (ac2avgNoEmptyEleList.Count > 0) { ac2avg = Math.Round(ac2avgNoEmptyEleList.Average(x => double.Parse(x.Attribute("avg").Value)), 2).ToString(); } XElement xe = new XElement(paramNameList[i]); xe.SetAttributeValue("max", ac1max); xe.SetAttributeValue("avg", ac1avg); list1.Add(xe); XElement xe2 = new XElement(paramNameList[i]); xe2.SetAttributeValue("max", ac2max); xe2.SetAttributeValue("avg", ac2avg); list2.Add(xe2); } List <List <XElement> > list = new List <List <XElement> >(); list.Add(list1); list.Add(list2); return(list); }