/// <summary> /// 查询钻孔编号列表,输出为Borehole类形式 /// </summary> /// <param name="_projectName">项目名称</param> /// <returns></returns> public static List <Borehole> ReadZkListAsClass(string _projectName) { // 创建连接到设置信息数据库 string sql = "Data Source=" + Program.ReadProgramPath() + "\\" + _projectName + ".gsygeo"; using (SQLiteConnection conn = new SQLiteConnection(sql)) { // 打开连接 conn.Open(); // 新建要返回的类列表 List <Borehole> zklist = new List <Borehole>(); // 循环读取钻孔数据 sql = "select * from zkBasicInfo order by name"; SQLiteDataReader reader = new SQLiteCommand(sql, conn).ExecuteReader(); while (reader.Read()) { Borehole zk = new Borehole(reader["name"].ToString(), Convert.ToDouble(reader["altitude"])); zk.X = Convert.ToDouble(reader["xAxis"]); zk.Y = Convert.ToDouble(reader["yAxis"]); zk.InitialWaterLevel = Convert.ToDouble(reader["initialWaterLevel"]); zk.StableWaterLevel = Convert.ToDouble(reader["stableWaterLevel"]); zk.Layers = BoreholeDataBase.ReadZkLayer(_projectName, reader["name"].ToString()); zk.Samples = BoreholeDataBase.ReadZkSample(_projectName, reader["name"].ToString()); zk.NTests = BoreholeDataBase.ReadZkNTest(_projectName, reader["name"].ToString()); zklist.Add(zk); } // 返回 return(zklist); } }
/// <summary> /// 计算取样所属分层函数 /// </summary> private void CalcuSampleLayer() { List <string> zkNumbers = BoreholeDataBase.ReadZkList(Program.currentProject); foreach (string zkNumber in zkNumbers) { List <ZkLayer> layers = BoreholeDataBase.ReadZkLayer(Program.currentProject, zkNumber); for (int i = 0; i < dtGAT.Rows.Count; i++) { string thisNumber = dtGAT.Rows[i]["zkNumber"].ToString(); double thisDepth = Convert.ToDouble(dtGAT.Rows[i]["sampleDepth"]); if (thisNumber == zkNumber) { for (int j = 0; j < layers.Count; j++) { if (thisDepth <= layers[j].Depth) { dtGAT.Rows[i]["sampleLayer"] = layers[j].Number; break; } } } } } }
/// <summary> /// 钻孔编号输入框内容变化时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ZKNameTextBox_TextChanged(object sender, TextChangedEventArgs e) { tt0.IsOpen = false; tt1.IsOpen = false; string str = this.ZKNameTextBox.Text; if (string.IsNullOrEmpty(str) || string.IsNullOrWhiteSpace(str)) { this.ZKNameTextBox.BorderBrush = Brushes.Red; setCanZkName = false; tt1.IsOpen = true; } else if (BoreholeDataBase.ReadZkList(Program.currentProject).Contains(str) && str != oldZkName) { this.ZKNameTextBox.BorderBrush = Brushes.Red; setCanZkName = false; tt0.IsOpen = true; } else { this.ZKNameTextBox.BorderBrush = Brushes.Gray; setCanZkName = true; // 绘图 DrawZk(); } }
/// <summary> /// 方法,重置钻孔列表 /// </summary> /// <param name="_projectName">项目名称</param> public void ReSetZkItem(string _projectName) { treeItem[1].Items.Clear(); ObservableCollection <TreeViewItem> items = BoreholeDataBase.ReadZkListAsTreeViewItem(_projectName); for (int i = 0; i < items.Count; i++) { treeItem[1].Items.Add(items[i]); } }
/// <summary> /// 检查保存数据合法性函数 /// </summary> /// <returns></returns> private bool CanSave() { for (int i = 0; i < dtGAT.Rows.Count; i++) { for (int j = 0; j < dtGAT.Columns.Count; j++) { // 检查取样孔号是否与数据库中匹配 if (j == 0) { string zkName = dtGAT.Rows[i][j].ToString(); if (!BoreholeDataBase.ReadZkList(Program.currentProject).Contains(zkName)) { MessageBox.Show("第" + (i + 1) + "行的取样孔号 " + zkName + " 无法在钻孔数据库中找到,请核实"); return(false); } } // 检查取样深度是否为有效数字 else if (j == 1) { double num; string dep = dtGAT.Rows[i][j].ToString(); if (string.IsNullOrEmpty(dep) || string.IsNullOrWhiteSpace(dep)) { MessageBox.Show("第" + (i + 1) + "行的取样深度 " + dep + " 是空值,取样深度不能为空"); return(false); } else if (!double.TryParse(dep, out num)) { MessageBox.Show("第" + (i + 1) + "行的取样深度 " + dep + " 不是有效数字"); return(false); } } // 跳过取样所属分层的检查 else if (j == 2) { continue; } // 检查试验数据是否为空 else { double num; string data = dtGAT.Rows[i][j].ToString(); if (!string.IsNullOrEmpty(data) && !string.IsNullOrWhiteSpace(data) && !double.TryParse(data, out num)) { MessageBox.Show("第" + (i + 1) + "行的 " + this.GrainAnalysisTestDataGrid.Columns[j].Header + " " + data + " 不是有效数字"); return(false); } } } } return(true); }
/// <summary> /// 读取钻孔数据函数 /// </summary> private void ReadZkList() { // 读取钻孔数据 ZkList = BoreholeDataBase.ReadZkListAsClass(Program.currentProject); // 赋值ComboBox for (int i = 0; i < ZkList.Count; i++) { CheckBox checkBox = new CheckBox(); checkBox.Content = ZkList[i].Name; this.ZkListBox.Items.Add(checkBox); } }
/// <summary> /// 点击"删除此钻孔" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteZkButton_Click(object sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(oldZkName) && !string.IsNullOrWhiteSpace(oldZkName)) { MessageBoxResult result = MessageBox.Show("您确定要删除 " + oldZkName + " 吗?\n该钻孔的所有资料将被删除,且不可恢复。", "删除钻孔", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { BoreholeDataBase.RemoveZk(Program.currentProject, oldZkName); MainWindow.bind.ReSetZkItem(Program.currentProject); this.Visibility = Visibility.Collapsed; } } }
/// <summary> /// 填充筛选ComboBox函数 /// </summary> private void InitialComboBox() { List <string> zklist = BoreholeDataBase.ReadZkList(Program.currentProject); zklist.Insert(0, "全部钻孔"); List <string> layerNumberlist = ProjectDataBase.ReadLayerNumberList(Program.currentProject); List <string> layerNamelist = ProjectDataBase.ReadLayerNameList(Program.currentProject); List <string> layerlist = new List <string>(); for (int i = 0; i < layerNumberlist.Count; i++) { layerlist.Add(layerNumberlist[i] + " " + layerNamelist[i]); } layerlist.Insert(0, "全部分层"); this.SelectByZkComboBox.ItemsSource = zklist; this.SelectByLayerComboBox.ItemsSource = layerlist; this.SelectByZkComboBox.SelectedIndex = 0; this.SelectByLayerComboBox.SelectedIndex = 0; }
/// <summary> /// 选取分层筛选选框时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LayerListComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 筛选 string selectedLayer = this.LayerListComboBox.SelectedItem.ToString(); selectedLayer = selectedLayer.Substring(0, selectedLayer.IndexOf(" ")); List <ZkNTest> ntests = BoreholeDataBase.ReadLayerNTest(Program.currentProject, selectedLayer); dtND.Clear(); DataRow dr; for (int i = 0; i < ntests.Count; i++) { dr = dtND.NewRow(); dr["zkNumber"] = ntests[i].ZkNumber; dr["nTestDepth"] = ntests[i].Depth.ToString("0.00"); dr["nTestValue"] = ntests[i].Value.ToString("0"); dr["nTestType"] = ntests[i].Type; dtND.Rows.Add(dr); } }
/// <summary> /// 筛选统计数据 /// </summary> /// <returns></returns> public static List <StatisticNTest> SelectStatisticData() { // 定义统计数据列表 List <StatisticNTest> statisticList = new List <StatisticNTest>(); // 定义分层分层编号列表、分层岩土名称列表、试验类型列表 List <string> layerNumberList = ProjectDataBase.ReadLayerNumberList(Program.currentProject); List <string> layerNameList = ProjectDataBase.ReadLayerNameList(Program.currentProject); ZkNTest.ntype[] typeList = new ZkNTest.ntype[] { ZkNTest.ntype.N, ZkNTest.ntype.N10, ZkNTest.ntype.N635, ZkNTest.ntype.N120 }; // 在分层编号列表中循环,赋值统计数据列表 for (int i = 0; i < layerNumberList.Count; i++) { // 在试验类型列表中循环 for (int j = 0; j < typeList.Length; j++) { // 检查当前的分层编号和试验类型的组合下在数据库中是否有内容 List <ZkNTest> nTestList = BoreholeDataBase.ReadLayerNTest(Program.currentProject, layerNumberList[i], typeList[j]); if (nTestList.Count > 0) { // 提取符合条件的标贯/动探列表中的试验数据值 List <double> dataList = new List <double>(); foreach (ZkNTest nTest in nTestList) { dataList.Add(nTest.Value); } // 添加一组符合筛选条件的统计数据 StatisticNTest stateNTest = new StatisticNTest(layerNumberList[i], layerNameList[i], typeList[j], dataList, 6); statisticList.Add(stateNTest); } } } // 返回 return(statisticList); }
/// <summary> /// 初始化项目数据库,创建基本表结构 /// </summary> /// <param name="_projectName">项目名称</param> private static void Initial(string _projectName) { // 创建连接到项目信息数据库 string sql = "Data Source=" + Program.ReadProgramPath() + "\\" + _projectName + ".gsygeo"; using (SQLiteConnection conn = new SQLiteConnection(sql)) { // 打开连接 conn.Open(); // 新建项目基本信息表projectBasicInfo 设置 项目名称 所在省份 所在县市 为空字符串 // 表头 项目名称name 所在省份province 所在县市city sql = "create table projectBasicInfo(name varchar(255),province varchar(255),city varchar(255))"; new SQLiteCommand(sql, conn).ExecuteNonQuery(); sql = "insert into projectBasicInfo(name,province,city) values('','','')"; new SQLiteCommand(sql, conn).ExecuteNonQuery(); // 新建项目岩土分层信息表projectLayer // 表头 分层编号number 分层名称name 地质年代geo 分层描述description sql = "create table projectLayer(number varchar(255),name varchar(255),geo varchar(255),description text)"; new SQLiteCommand(sql, conn).ExecuteNonQuery(); // 新建项目公司信息表projectCompany 设置初始空字符串 // 表头 公司名称companyName 资质代码companyCode 绘图人drawer 报告编写人writer 校核人checker 审查人inspector 核定人approver 批准人finalApprover sql = "create table projectCompany(companyName varchar(255),companyCode varchat(255),drawer varchat(255),writer varchat(255),checker varchar(255),inspector varchar(255),approver varchar(255),finalApprover varchar(255))"; new SQLiteCommand(sql, conn).ExecuteNonQuery(); sql = "insert into projectCompany(companyName,companyCode,drawer,writer,checker,inspector,approver,finalApprover) values('','','','','','','','')"; new SQLiteCommand(sql, conn).ExecuteNonQuery(); } // 创建必要数据表 BoreholeDataBase.Initial(_projectName); CPTDataBase.Initial(_projectName); RoutineSoilTestDataBase.Initial(_projectName); GrainAnalysisTestDataBase.Initial(_projectName); }
/// <summary> /// 单击菜单"工具"-"导入旧版数据" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ImportOldDataMenu_Click(object sender, RoutedEventArgs e) { // 检查是否关闭当前项目 if (Program.currentProject != null) { MessageBox.Show("您有正处于打开状态的项目,请关闭当前项目后再执行本操作。"); return; } // 选择输出目录 string folderPath; System.Windows.Forms.FolderBrowserDialog programPathBrowser = new System.Windows.Forms.FolderBrowserDialog(); if (programPathBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK) { folderPath = programPathBrowser.SelectedPath; } else { return; } if (folderPath.Substring(folderPath.LastIndexOf(@"\") + 1) != "金浪岩土") { MessageBox.Show("选择的文件夹不正确,请选择\"金浪岩土\"文件夹!"); return; } // 耐心等候提示 MessageBox.Show("导入过程可能需要15-30秒的时间,请耐心等候,点击\"确定\"继续。"); // 遍历项目文件夹 List <string> projectlist = new List <string>(); List <string> ignoreprojectlist = new List <string>(); DirectoryInfo dir = new DirectoryInfo(folderPath); foreach (DirectoryInfo dChild in dir.GetDirectories("*")) { // 获取项目名称 string projectName = dChild.ToString(); // 获取项目文件夹路径 string projectPath = folderPath + @"\" + dChild + @"\"; // 新建项目 if (!string.IsNullOrEmpty(projectName) && !string.IsNullOrWhiteSpace(projectName)) { ProjectDataBase.Create(projectName); } // 读取分层信息 StreamReader reader = new StreamReader(projectPath + "基本信息.txt"); int countLine = 0; while (true) { countLine++; string line = reader.ReadLine(); if (countLine <= 3) { continue; } if (line == null) { break; } string number = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); string name = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); string description = line; string geo = "Q4al"; ProjectDataBase.AddLayer(projectName, number, name, geo, description); } reader.Close(); // 读取钻孔信息 List <string> numlist = ProjectDataBase.ReadLayerNumberList(projectName); List <string> deslist = ProjectDataBase.ReadLayerDescriptionList(projectName); DirectoryInfo dirZk = new DirectoryInfo(projectPath + @"钻孔\"); foreach (FileInfo dZkFile in dirZk.GetFiles("*.txt")) { // 读取基本信息 StreamReader zkReader = new StreamReader(projectPath + @"钻孔\" + dZkFile.ToString()); zkReader.ReadLine(); string zkname = zkReader.ReadLine(); zkReader.ReadLine(); double zkaltitude = Convert.ToDouble(zkReader.ReadLine()); BoreholeDataBase.AddZkBasicInfo(projectName, zkname, zkaltitude, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber); zkReader.ReadLine(); // 读取分层信息 List <string> zknumberlist = new List <string>(); List <string> zknamelist = new List <string>(); List <string> zkgeolist = new List <string>(); List <string> zkdescriptionlist = new List <string>(); List <double> zkdepthlist = new List <double>(); while (true) { string line = zkReader.ReadLine(); if (line == "===取样===") { break; } zknumberlist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); zknamelist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); zkdepthlist.Add(Convert.ToDouble(line)); zkgeolist.Add("Q4al"); int index = numlist.IndexOf(zknumberlist[zknumberlist.Count - 1]); zkdescriptionlist.Add(deslist[index]); } BoreholeDataBase.AddLayerListToZk(projectName, zkname, zknumberlist, zknamelist, zkgeolist, zkdescriptionlist, zkdepthlist); // 读取取样信息 List <string> spnumberlist = new List <string>(); List <double> spdepthlist = new List <double>(); List <int> spisdisturbedlist = new List <int>(); countLine = 0; while (true) { string line = zkReader.ReadLine(); if (line == "===标贯===") { break; } countLine++; spnumberlist.Add(countLine.ToString()); spdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/")))); line = line.Substring(line.IndexOf("/") + 1); spisdisturbedlist.Add(line == "扰" ? 1 : 0); } BoreholeDataBase.AddSampleListToZk(projectName, zkname, spnumberlist, spdepthlist, spisdisturbedlist); // 读取标贯信息 List <string> ntnumberlist = new List <string>(); List <double> ntdepthlist = new List <double>(); List <double> ntvaluelist = new List <double>(); List <string> nttypelist = new List <string>(); countLine = 0; while (true) { string line = zkReader.ReadLine(); if (line == null) { break; } countLine++; ntnumberlist.Add(countLine.ToString()); ntdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/")))); line = line.Substring(line.IndexOf("/") + 1); ntvaluelist.Add(Convert.ToDouble(line)); nttypelist.Add("N"); } BoreholeDataBase.AddNTestListToZk(projectName, zkname, ntnumberlist, ntdepthlist, ntvaluelist, nttypelist); zkReader.Close(); } // 读取静力触探信息 DirectoryInfo dirJk = new DirectoryInfo(projectPath + @"静力触探\"); foreach (FileInfo dJkFile in dirJk.GetFiles("*.txt")) { // 读取基本信息 StreamReader jkReader = new StreamReader(projectPath + @"静力触探\" + dJkFile.ToString()); jkReader.ReadLine(); string jkname = jkReader.ReadLine(); jkReader.ReadLine(); double jkaltitude = Convert.ToDouble(jkReader.ReadLine()); CPTDataBase.AddJkBasicInfo(projectName, jkname, jkaltitude, Constants.NullNumber, Constants.NullNumber); jkReader.ReadLine(); // 读取分层信息 List <string> jknumberlist = new List <string>(); List <string> jknamelist = new List <string>(); List <string> jkgeolist = new List <string>(); List <string> jkdescriptionlist = new List <string>(); List <double> jkdepthlist = new List <double>(); while (true) { string line = jkReader.ReadLine(); if (line == "===Ps值===") { break; } jknumberlist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); jknamelist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); jkdepthlist.Add(Convert.ToDouble(line)); jkgeolist.Add("Q4al"); int index = numlist.IndexOf(jknumberlist[jknumberlist.Count - 1]); jkdescriptionlist.Add(deslist[index]); } CPTDataBase.AddLayerListToJk(projectName, jkname, jknumberlist, jknamelist, jkgeolist, jkdescriptionlist, jkdepthlist); // 读取Ps值信息 List <double> pslist = new List <double>(); while (true) { string line = jkReader.ReadLine(); if (line == null) { break; } pslist.Add(Convert.ToDouble(line)); } CPTDataBase.AddPsListToJk(projectName, jkname, pslist); } // 读取土工试验 StreamReader rstReader = new StreamReader(projectPath + @"土工试验\NormalTest.txt"); List <RoutineSoilTest> rsts = new List <RoutineSoilTest>(); while (true) { string line = rstReader.ReadLine(); if (line == null) { break; } string zkNumber = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); double sampleDepth = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); string sampleLayer = ProjectDataBase.ReadLayerNumberList(projectName)[0]; List <ZkLayer> layers = BoreholeDataBase.ReadZkLayer(projectName, zkNumber); for (int i = 0; i < layers.Count; i++) { if (sampleDepth <= layers[i].Depth) { sampleLayer = layers[i].Number; break; } } double waterLevel = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double density = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double specificGravity = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double voidRatio = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double saturation = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double liquidLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double plasticLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double plasticIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double liquidityIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double compressibility = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double modulus = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double frictionAngle = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double cohesion = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double permeability = line.Substring(0, line.IndexOf("/")) == "0.000000E+000" ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); RoutineSoilTest rst = new RoutineSoilTest(zkNumber, sampleDepth, sampleLayer, waterLevel, density, specificGravity, voidRatio, saturation, liquidLimit, plasticLimit, plasticIndex, liquidityIndex, compressibility, modulus, frictionAngle, cohesion, permeability); rsts.Add(rst); } rstReader.Close(); GC.Collect(); GC.WaitForPendingFinalizers(); RoutineSoilTestDataBase.Refresh(projectName, rsts); projectlist.Add(projectName); } // 成功提示 StringBuilder sb = new StringBuilder(); if (projectlist.Count > 0) { sb.AppendLine("已成功导入以下项目:"); for (int i = 0; i < projectlist.Count; i++) { sb.AppendLine((i + 1).ToString() + projectlist[i]); } } else { sb.AppendLine("没有导入任何项目。"); } MessageBox.Show(sb.ToString()); }
// TreeView选择节点变化时激活不同的内容控件 private void ProjectTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { // 读取选中节点 TreeViewItem selectedItem = (TreeViewItem)e.NewValue; // 根据选中状况清空窗口中的控件 if (selectedItem == null) { this.ContectGrid.Children.Clear(); return; } if (selectedItem.Header.ToString() != "基本信息" && selectedItem.Parent != null) { this.ContectGrid.Children.Clear(); } // 选中一级节点时 // 选中"基本信息" if (selectedItem.Header.ToString() == "基本信息") { ProjectBasicInfo prjb = new ProjectBasicInfo(); this.ContectGrid.Children.Add(prjb); } // 选中二级、三级节点时 if (selectedItem.Parent != null) { // 读取父节点 TreeViewItem parentItem = (TreeViewItem)selectedItem.Parent; // 选中"钻孔"子节点 if (parentItem.Header.ToString() == "钻孔") { // 读取当前所选钻孔名称 string prj = Program.currentProject; string zkName = selectedItem.Header.ToString(); // 实例化一个Borehole类,并将当前所选钻孔的数据库信息赋值给此实例 Borehole bh = new Borehole(zkName, BoreholeDataBase.ReadAltitude(prj, zkName)); bh.X = BoreholeDataBase.ReadXAxis(prj, zkName); bh.Y = BoreholeDataBase.ReadYAxis(prj, zkName); bh.InitialWaterLevel = BoreholeDataBase.ReadInitialWaterLevel(prj, zkName); bh.StableWaterLevel = BoreholeDataBase.ReadStableWaterLevel(prj, zkName); bh.Layers = BoreholeDataBase.ReadZkLayer(prj, zkName); bh.Samples = BoreholeDataBase.ReadZkSample(prj, zkName); bh.NTests = BoreholeDataBase.ReadZkNTest(prj, zkName); // 实例化BoreholeControl用户控件,并赋值 BoreholeControl bhc = new BoreholeControl(bh); this.ContectGrid.Children.Add(bhc); } // 选取"原位测试"-"静力触探"子节点 if (parentItem.Header.ToString() == "静力触探") { // 读取当前所选触探孔名称 string prj = Program.currentProject; string jkName = selectedItem.Header.ToString(); // 实例化一个CPT类,并将当前所选触探孔的数据库信息赋值给此实例 CPT cpt = new CPT(jkName, CPTDataBase.ReadAltitude(prj, jkName)); cpt.X = CPTDataBase.ReadXAxis(prj, jkName); cpt.Y = CPTDataBase.ReadYAxis(prj, jkName); cpt.Layers = CPTDataBase.ReadJkLayer(prj, jkName); cpt.PsList = CPTDataBase.ReadJkPs(prj, jkName); // 实例化CPTControl用户控件,并赋值 CPTControl cptc = new CPTControl(cpt); this.ContectGrid.Children.Add(cptc); } // 选取"室内试验"-"土工常规"子节点 if (selectedItem.Header.ToString() == "土工常规") { // 实例化一个RoutineSoilTest类列表,并读取数据库信息赋值给此实例 List <RoutineSoilTest> rsts = RoutineSoilTestDataBase.ReadAllData(Program.currentProject); // 实例化RoutineSoilTestControl用户控件,并赋值 RoutineSoilTestControl rstc = new RoutineSoilTestControl(rsts); this.ContectGrid.Children.Add(rstc); } // 选取"室内试验"-"颗粒分析"子节点 if (selectedItem.Header.ToString() == "颗粒分析") { // 实例化一个RoutineSoilTest类列表,并读取数据库信息赋值给此实例 List <GrainAnalysisTest> gats = GrainAnalysisTestDataBase.ReadAllData(Program.currentProject); // 实例化RoutineSoilTestControl用户控件,并赋值 GrainAnalysisTestControl gatc = new GrainAnalysisTestControl(gats); this.ContectGrid.Children.Add(gatc); } } }
/// <summary> /// 筛选统计数据 /// </summary> /// <returns></returns> public static StatisticWordLoad SelectStatisticData() { // 定义统计数据列表 StatisticWordLoad statisticData = new StatisticWordLoad(); // 读取钻孔列表 List <Borehole> zkList = BoreholeDataBase.ReadZkListAsClass(Program.currentProject); // 统计钻孔数量 int countZk = zkList.Count; double countZkDepth = 0; int countUndisturbedSample = 0, countDisturbedSample = 0; int countNTestStandard = 0, countNTestN10 = 0, countNTestN635 = 0, countNTestN120 = 0; foreach (Borehole zk in zkList) { // 统计钻孔进尺 countZkDepth += zk.Layers[zk.Layers.Count - 1].Depth; // 统计原状样、扰动样数量 foreach (ZkSample sample in zk.Samples) { if (sample.IsDisturbed) { countDisturbedSample++; } else { countUndisturbedSample++; } } // 统计标贯/动探数量 foreach (ZkNTest ntest in zk.NTests) { if (ntest.Type == ZkNTest.ntype.N) { countNTestStandard++; } else if (ntest.Type == ZkNTest.ntype.N10) { countNTestN10++; } else if (ntest.Type == ZkNTest.ntype.N635) { countNTestN635++; } else { countNTestN120++; } } } // 读取土工常规试验列表 List <RoutineSoilTest> rstList = RoutineSoilTestDataBase.ReadAllData(Program.currentProject); // 统计常规试验数量、室内渗透试验数量 int countRST = 0, countPermeability = 0; double n = -0.19880205; foreach (RoutineSoilTest rst in rstList) { // 统计室内渗透试验 if (rst.permeability != n) { countPermeability++; } //统计土工常规试验 if (rst.waterLevel != n || rst.voidRatio != n || rst.specificGravity != n || rst.saturation != n || rst.plasticLimit != n || rst.plasticIndex != n || rst.modulus != n || rst.liquidLimit != n || rst.liquidityIndex != n || rst.frictionAngle != n || rst.density != n || rst.compressibility != n || rst.cohesion != n) { countRST++; } } // 读取颗粒分析试验列表 List <GrainAnalysisTest> gatList = GrainAnalysisTestDataBase.ReadAllData(Program.currentProject); // 统计颗分试验数量 int countGAT = gatList.Count; // 读取静力触探列表 List <CPT> jkList = CPTDataBase.ReadJkListAsClass(Program.currentProject); // 统计钻孔数量 int countJk = jkList.Count; // 统计静力触探进尺 double countJkDepth = 0; foreach (CPT jk in jkList) { countJkDepth += jk.Layers[jk.Layers.Count - 1].Depth; } // 赋值给统计列表 statisticData.CountBorehole = countZk; statisticData.CountBoreholePacking = countZk; statisticData.Borehole = countZkDepth; statisticData.BoreholePacking = countZkDepth; statisticData.UndisturbedSample = countUndisturbedSample; statisticData.DisturbedSample = countDisturbedSample; statisticData.NTestStandard = countNTestStandard; statisticData.NTestN10 = countNTestN10; statisticData.NTestN635 = countNTestN635; statisticData.NTestN120 = countNTestN120; statisticData.CountCPT = countJk; statisticData.CPT = countJkDepth; statisticData.RST = countRST; statisticData.Permeability = countPermeability; statisticData.GAT = countGAT; // 返回 return(statisticData); }
/// <summary> /// Save命令的Executed事件处理函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CommandBindingSave_Executed(object sender, ExecutedRoutedEventArgs e) { // 提取钻孔基本信息参数 string zkName = this.ZKNameTextBox.Text; double zkAltitude = Convert.ToDouble(this.ZKAltitudeTextBox.Text); double zkAxisX = !string.IsNullOrEmpty(this.AxisXTextBox.Text) && !string.IsNullOrWhiteSpace(this.AxisXTextBox.Text) ? Convert.ToDouble(this.AxisXTextBox.Text) : -0.19880205; double zkAxisY = !string.IsNullOrEmpty(this.AxisYTextBox.Text) && !string.IsNullOrWhiteSpace(this.AxisYTextBox.Text) ? Convert.ToDouble(this.AxisYTextBox.Text) : -0.19880205; double zkIniWL = !string.IsNullOrEmpty(this.InitialWaterLevelTextBox.Text) && !string.IsNullOrWhiteSpace(this.InitialWaterLevelTextBox.Text) ? Convert.ToDouble(this.InitialWaterLevelTextBox.Text) : -0.19880205; double zkStaWL = !string.IsNullOrEmpty(this.StableWaterLevelTextBox.Text) && !string.IsNullOrWhiteSpace(this.StableWaterLevelTextBox.Text) ? Convert.ToDouble(this.StableWaterLevelTextBox.Text) : -0.19880205; // 提取钻孔分层参数 List <string> zkLayerNumberList = new List <string>(); List <string> zkLayerNameList = new List <string>(); List <string> zkLayerGeoList = new List <string>(); List <double> zkLayerDepthList = new List <double>(); List <string> zkLayerDescriptionList = new List <string>(); for (int i = 0; i < dtLayer.Rows.Count; i++) { zkLayerNumberList.Add((string)dtLayer.Rows[i][0]); zkLayerNameList.Add((string)dtLayer.Rows[i][1]); zkLayerGeoList.Add((string)dtLayer.Rows[i][2]); zkLayerDepthList.Add((double)dtLayer.Rows[i][3]); zkLayerDescriptionList.Add((string)dtLayer.Rows[i][4]); } // 提取钻孔取样参数 List <string> zkSampleNumberList = new List <string>(); List <double> zkSampleDepthList = new List <double>(); List <int> zkSampleIsDisturbedList = new List <int>(); for (int i = 0; i < dtSample.Rows.Count; i++) { zkSampleNumberList.Add((string)dtSample.Rows[i][0]); zkSampleDepthList.Add((double)dtSample.Rows[i][1]); zkSampleIsDisturbedList.Add((bool)dtSample.Rows[i][2] == true ? 1 : 0); } // 提取钻孔标贯/动探参数 List <string> zkNTestNumberList = new List <string>(); List <double> zkNTestDepthList = new List <double>(); List <double> zkNTestValueList = new List <double>(); List <string> zkNTestTypeList = new List <string>(); for (int i = 0; i < dtNTest.Rows.Count; i++) { zkNTestNumberList.Add((string)dtNTest.Rows[i][0]); zkNTestDepthList.Add((double)dtNTest.Rows[i][1]); zkNTestValueList.Add((double)dtNTest.Rows[i][2]); string s; if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N) { s = "N"; } else if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N10) { s = "N10"; } else if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N635) { s = "N635"; } else { s = "N120"; } zkNTestTypeList.Add(s); } // 保存钻孔到数据库 if (isNewZk == false) { BoreholeDataBase.RemoveZk(Program.currentProject, oldZkName); } BoreholeDataBase.AddZkBasicInfo(Program.currentProject, zkName, zkAltitude, zkAxisX, zkAxisY, zkIniWL, zkStaWL); BoreholeDataBase.AddLayerListToZk(Program.currentProject, zkName, zkLayerNumberList, zkLayerNameList, zkLayerGeoList, zkLayerDescriptionList, zkLayerDepthList); BoreholeDataBase.AddSampleListToZk(Program.currentProject, zkName, zkSampleNumberList, zkSampleDepthList, zkSampleIsDisturbedList); BoreholeDataBase.AddNTestListToZk(Program.currentProject, zkName, zkNTestNumberList, zkNTestDepthList, zkNTestValueList, zkNTestTypeList); // 更新导航树 MainWindow.bind.ReSetZkItem(Program.currentProject); // 更新状态标签 this.IsChangedTextBlock.Text = "已保存"; this.IsChangedTextBlock.Foreground = Brushes.Blue; MessageBox.Show("保存成功!"); this.Visibility = Visibility.Collapsed; }