/// <summary> /// 填报数据 /// </summary> /// <param name="parameterKey">参数名称。</param> /// <param name="elementContainer">用于从网页中查找元素的对象,当value为Hashtable时表示当前是一组Radio或CheckBox。</param> /// <param name="parameterValue">用于填报的数据。</param> /// <param name="list">用于存储多值数据的列表。</param> private void FillElement(FillParameterKey parameterKey, object elementContainer, Hashtable data) { this.Wait(); FillParameter fillParameter = elementContainer as FillParameter; String parameterValue = data[parameterKey.Key] as String; if (fillParameter == null) { Hashtable table = elementContainer as Hashtable; if (table == null) { return; } else if (parameterKey.Type == Matcher.TYPE_RADIO) { // 处理radio类型的选择 if (parameterValue != null) { fillParameter = table[parameterValue] as FillParameter; } } else if (parameterKey.Type == Matcher.TYPE_CHECKBOX) // 处理checkBox类型 { FillCheckBoxGroup(ref parameterValue, table); data.Remove(parameterKey.Key); data.Add(parameterKey.Key, parameterValue); return; } } FillElement(fillParameter, ref parameterValue); data.Remove(parameterKey.Key); data.Add(parameterKey.Key, parameterValue); }
protected void FillElement(FillParameterKey parameterKey, object elementContainer, string parameterValue) { this.Wait(); FillParameter fillParameter = elementContainer as FillParameter; if (fillParameter == null) { Hashtable table = elementContainer as Hashtable; if (table == null) { return; } else if (parameterKey.Type == Matcher.TYPE_RADIO) { // 处理radio类型的选择 if (parameterValue != null) { if (table.ContainsKey(parameterValue) == false) { this.FillRecords.Add(new FillRecord(ElementType.Radio, RecordType.Failed, string.Format("单选框中不包含项 {0}", parameterValue), parameterKey.Key)); } fillParameter = table[parameterValue] as FillParameter; } } else if (parameterKey.Type == Matcher.TYPE_CHECKBOX) // 处理checkBox类型 { FillCheckBoxGroup(parameterValue, parameterKey.Key, table); return; } } FillElement(fillParameter, parameterValue); }
private void FillListElement(List <KeyValuePair <FillParameterKey, object> > list, List <string> values) { if (list.Count == 0) { return; } if (list.Count == 1 && (list[0].Key.Type == Matcher.TYPE_SUBMIT || list[0].Key.Type == "BUTTON/SUBMIT" || list[0].Key.Type == Matcher.TYPE_BUTTON)) { FillListElementUncertain(list[0].Value as FillParameter); list.Clear(); values.Clear(); return; } string[] valueArray = null; int maxValueLength = 0; List <string[]> valueList = new List <string[]>(); foreach (var value in values) { valueArray = value == null ? emptyStringArray : value.Split(base.Converter.SpliterChars[0]); valueList.Add(valueArray); maxValueLength = Math.Max(maxValueLength, valueArray.Length); } base.CurrentIndex = 0; FillIndexes.Add(this); for (int valueIndex = 0; valueIndex < maxValueLength; valueIndex++) { base.CurrentIndex = valueIndex; // 更新当前填报索引 FillParameterKey key = null; object elementContainer = null; string parameterValue = ""; for (int i = 0; i < list.Count; i++) { key = list[i].Key; elementContainer = list[i].Value; if (list[i].Key.Type == Matcher.TYPE_SUBMIT || list[i].Key.Type == "BUTTON/SUBMIT") { parameterValue = null; } else if (valueList[i].Length > valueIndex) { parameterValue = valueList[i][valueIndex]; } else { parameterValue = ""; } FillElement(key, elementContainer, parameterValue); } this.Wait(); } list.Clear(); values.Clear(); FillIndexes.RemoveAt(FillIndexes.Count - 1); }
private void GetParameters() { Hashtable uniqueTable = new Hashtable(); _parameters.Clear(); string note = ""; Hashtable group = null; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile())) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(_urlParameter.LabelName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } object content = null; if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString()); } } FillParameter dElement; FillParameterKey key; while (sheet.ReadNextRow()) { dElement = new FillParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); string value = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "元素id": dElement.Id = value; break; case "元素name": dElement.Name = value; break; case "元素value": dElement.Value = value; break; case "元素href": dElement.href = value; break; case "类别": dElement.Type = value == null ? "" : value.ToUpper(); break; case "onclick": dElement.OnClick = value; break; case "参数名称": dElement.ParameterName = value; break; case "备注": note = value; break; case "可新增": dElement.CanAdd = value == "是"; break; case "查找": dElement.SearchString = value; break; case "frameId": dElement.FrameId = value; break; case "数据所在工作表": dElement.TableName = value; break; case "拆分规则": dElement.SplitExpr = value; break; case "可删除": dElement.CanDelete = value == "是"; break; case "模糊匹配": dElement.CanContain = value == "是"; break; case "是否必填": dElement.IsRequired = value == "是"; break; } } if (string.IsNullOrEmpty(dElement.Type)) { continue; } if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX) { // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数 if (string.IsNullOrEmpty(dElement.ParameterName) == false && uniqueTable.ContainsKey(dElement.ParameterName) == false) { group = new Hashtable(); key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.CanDelete, dElement.CanContain, dElement.SearchString); _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group)); uniqueTable.Add(dElement.ParameterName, group); } //只保存第一个radio或者checkbox参数,在group里面保存全部的信息 group.Add(dElement.Value, dElement); } else { group = null; key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.CanDelete, dElement.IsRequired, dElement.CanContain, dElement.SearchString); key.TableName = dElement.TableName; _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement)); } } uniqueTable.Clear(); } }
//得到参数 protected void GetParameters() { Hashtable uniqueTable = new Hashtable(); _parameters.Clear(); string note = ""; Hashtable group = null; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile())) { reader.Open(); string sheetName = string.Format("{0}({1})", _urlParameter.LabelName, this.Standard); // 同类车型中不同排放标准的填报规则可能不同。 sheetName = reader.Contains(sheetName) ? sheetName : _urlParameter.LabelName; Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } object content = null; if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString()); } } FillParameter dElement; FillParameterKey key; while (sheet.ReadNextRow()) { dElement = new FillParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); string value = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "元素id": dElement.Id = value; break; case "元素name": dElement.Name = value; break; case "元素value": dElement.Value = value; break; case "类别": dElement.Type = value == null ? "" : value.ToUpper(); break; case "onclick": dElement.OnClick = value; break; case "参数名称": dElement.ParameterName = value; break; case "备注": note = value; break; case "可新增": dElement.CanAdd = value == "是"; break; case "查找": dElement.SearchString = value; break; case "frameId": dElement.FrameId = value; break; case "是否必填": dElement.IsRequired = value == "是"; break; case "数据表": dElement.TableName = value; break; case "查找代码": dElement.FindCode = value; break; } } if (string.IsNullOrEmpty(dElement.Type)) { continue; } if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX) { // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数 if (uniqueTable.ContainsKey(dElement.ParameterName) == false) { group = new Hashtable(); key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString); _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group)); uniqueTable.Add(dElement.ParameterName, group); } group.Add(dElement.Value, dElement); } else { group = null; key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString); key.TableName = dElement.TableName; _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement)); } } uniqueTable.Clear(); } }
/// <summary> /// 填充元素(分割元素) /// </summary> /// <param name="list"></param> /// <param name="values"></param> private void FillListElement(List <KeyValuePair <FillParameterKey, object> > list, List <string> values) { //包含分割字符串 if (list.Count == 1 && (list[0].Key.Type == Matcher.TYPE_SUBMIT || list[0].Key.Type == "BUTTON/SUBMIT" || list[0].Key.Type == Matcher.TYPE_BUTTON)) { //仅包含新增按钮的新增列表 FillListElementUncertain(list[0].Value as FillParameter); list.Clear(); values.Clear(); return; } string[] valueArray = null; int maxValueLength = 0; List <string[]> valueList = new List <string[]>(); foreach (var value in values) { valueArray = value == null ? emptyStringArray : value.Split(base.Converter.SpliterChars[0]); valueList.Add(valueArray); maxValueLength = Math.Max(maxValueLength, valueArray.Length); } base.CurrentIndex = 0; string name = ((FillParameter)(list[0].Value)).Name; bool skipLastButton = (string.IsNullOrEmpty(name) == false && name.Contains("[") && name.Contains("]")); FillIndexes.Add(this); for (int valueIndex = 0; valueIndex < maxValueLength; valueIndex++) { base.CurrentIndex = valueIndex; // 更新当前填报索引 FillParameterKey key = null; //具体的某个控件 object elementContainer = null; string parameterValue = ""; if (valueIndex > 0) { nameNum++; } for (int i = 0; i < list.Count; i++) { key = list[i].Key; elementContainer = list[i].Value; if (list[i].Key.Type == Matcher.TYPE_SUBMIT || list[i].Key.Type == Matcher.TYPE_A || list[i].Key.Type == "BUTTON/SUBMIT" || list[i].Key.Type == Matcher.TYPE_BUTTON) { if (valueIndex == maxValueLength - 1 && skipLastButton) { continue; } parameterValue = null; } else if (valueList[i].Length > valueIndex) { parameterValue = valueList[i][valueIndex]; } else { parameterValue = ""; } //判断所填写是否为新增元素 if (valueIndex > 0) { //修改name FillParameter fp = (FillParameter)elementContainer; name = fp.Name; if (string.IsNullOrEmpty(name) == false && name.Contains("[") && name.Contains("]")) { int index1 = name.IndexOf("["), index2 = name.IndexOf("]", index1 == -1 ? 0 : index1); System.Diagnostics.Trace.Assert(index1 != -1 && index2 != -1); string left = name.Substring(0, index1); string right = name.Substring(index2 + 1); //拼接name fp.Name = string.Format("{0}[{1}]{2}", left, nameNum, right); fp.FindCode = ""; } } FillElement(key, elementContainer, parameterValue); }//end for this.Wait(); } FillIndexes.RemoveAt(FillIndexes.Count - 1); list.Clear(); values.Clear(); }