/// <summary> /// 需要用到的数据库字段:OpenClassName,OpenClassMethod,OpenClassParameters。 /// OpenClassParameters是放多个值,用","分隔,按顺序调用,其中记录的是数据库的字段名,并且跟OpenClassMethod的参数相对应(p_frmInvoker除外)。 /// 查询时返回的二维数值前若干列返回OpenClassParameters对应的数据库中的值。 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_strResArr">查询结果的数组</param> /// <param name="p_intClickRow">用户点击的记录行</param> private void m_mthOpenOrderByReflection(clsStatisticDefinitionValue p_objDefinition, string [,] p_strResArr, int p_intClickRow) { int intParametersNum = m_intGetDefinitionParametersNum(p_objDefinition); object[] objArr = new object[intParametersNum + 1]; objArr[0] = this; for (int i = 0; i < objArr.Length - 1; i++) { objArr[i + 1] = p_strResArr[p_intClickRow, i]; } this.Cursor = Cursors.WaitCursor; try { Type typ = Type.GetType(p_objDefinition.m_strOpenClassName.Trim()); Object obj = Activator.CreateInstance(typ); typ.GetMethod(p_objDefinition.m_strOpenClassMethod.Trim()).Invoke(obj, objArr); } catch { this.Cursor = Cursors.Default; return; } this.Cursor = Cursors.Default; }
/// <summary> /// 显示查询结果 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_strQueryReslutDArr">查询结果</param> private void m_mthDisplayResult(clsStatisticDefinitionValue p_objDefinition, string [,] p_strQueryReslutDArr) { if (p_objDefinition == null || p_strQueryReslutDArr == null) { return; } int intParametersNum = m_intGetDefinitionParametersNum(p_objDefinition); int intColumnNum = m_lsvQueryResult.Columns.Count; int intRowNum = p_strQueryReslutDArr.Length / (intColumnNum + intParametersNum); ListViewItem[] objLsvItemArr = new ListViewItem[intRowNum]; for (int i = 0; i < intRowNum; i++) { string[] strItemArr = new string[intColumnNum]; for (int k2 = 0; k2 < intColumnNum; k2++) { strItemArr[k2] = p_strQueryReslutDArr[i, k2 + intParametersNum]; } objLsvItemArr[i] = new ListViewItem(strItemArr); } m_lsvQueryResult.Items.AddRange(objLsvItemArr); m_lsvQueryResult.Tag = p_strQueryReslutDArr; }
/// <summary> /// 获取查询结果 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_objQueryMode">查询模板</param> /// <returns></returns> private string [,] m_strGetResultArr(clsStatisticDefinitionValue p_objDefinition, clsStatisticQueryModeValue p_objQueryMode) { if (p_objDefinition == null || m_blnIsEmptyString(p_objDefinition.m_strStatisticSQLContent) || m_blnIsEmptyString(p_objDefinition.m_strOpenClassParameters)) { return(null); } if (p_objQueryMode == null || m_blnIsEmptyString(p_objQueryMode.m_strSelectedFieldIndexes)) { return(null); } string [,] strQueryReslutDArr = null; long lngRes = m_objDomain.m_lngPerformSqlQuery(p_objDefinition.m_strStatisticSQLContent, p_objDefinition.m_strOpenClassParameters, p_objQueryMode.m_strSelectedFieldIndexes.Replace(c_strSplitSelectedFieldSymbol, ","), (XmlDocument)dataGrid1.Tag, out strQueryReslutDArr); if (lngRes <= 0 || strQueryReslutDArr == null) { return(null); } else { return(strQueryReslutDArr); } }
/// <summary> /// 初始化查询模板细节信息 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_objQueryMode">查询模板</param> private void m_mthInitQueryDetail(clsStatisticDefinitionValue p_objDefinition, clsStatisticQueryModeValue p_objQueryMode) { if (p_objDefinition == null || m_blnIsEmptyString(p_objDefinition.m_strStatistic_ID) || p_objQueryMode == null || m_blnIsEmptyString(p_objQueryMode.m_strModeDesc)) { return; } m_lblSearchDesc.Text = "查询说明:" + p_objQueryMode.m_strModeDesc; m_mthLoadXmlToDataGrid(p_objDefinition, p_objQueryMode); }
/// <summary> /// 初始化查询模板信息 /// </summary> /// <param name="p_trnQueryMode">查询模板的树节点。如果节点不是查询模板节点,不做任何操作</param> private void m_mthInitQueryModeInfo(TreeNode p_trnQueryMode) { m_mthClearQueryInfo(); if (!m_blnIsQueryModeTreeNode(p_trnQueryMode)) { return; } clsStatisticQueryModeValue objQueryMode = (clsStatisticQueryModeValue)p_trnQueryMode.Tag; clsStatisticDefinitionValue objDefinition = (clsStatisticDefinitionValue)p_trnQueryMode.Parent.Tag; m_mthInitQueryDisplayField(objDefinition, objQueryMode); m_mthInitQueryDetail(objDefinition, objQueryMode); }
/// <summary> /// 把Xml中用户定义值放置在DataGrid /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_objQueryMode">查询模板</param> private void m_mthLoadXmlToDataGrid(clsStatisticDefinitionValue p_objDefinition, clsStatisticQueryModeValue p_objQueryMode) { if (p_objDefinition == null || p_objQueryMode == null || m_blnIsEmptyString(p_objQueryMode.m_strXMLContent)) { return; } XmlDocument objXmlDoc = new XmlDocument(); try { objXmlDoc.LoadXml(p_objQueryMode.m_strXMLContent); } catch { return; } XmlNodeList xnlUserCondition = objXmlDoc.GetElementsByTagName(c_strUserCondiction); if (xnlUserCondition.Count <= 0) { return; } clsStatisticCondictionOptionValue [] objCondictionOptionArr = (clsStatisticCondictionOptionValue [])m_hasConditionField[p_objDefinition.m_strStatistic_ID]; if (objCondictionOptionArr == null) { long lngRes = m_objDomain.m_lngGetStatisticCondictionOptionValue(p_objDefinition.m_strStatistic_ID, out objCondictionOptionArr); if (lngRes <= 0 || objCondictionOptionArr == null) { return; } m_hasConditionField[p_objDefinition.m_strStatistic_ID] = objCondictionOptionArr; } foreach (XmlNode xndCondition in xnlUserCondition) { XmlNode xndParentCondition = xndCondition; m_mthAddUserConditionToDataGrid(xndCondition, objCondictionOptionArr); } dataGrid1.Tag = objXmlDoc; }
/// <summary> /// 初始化查询结果字段 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <param name="p_objQueryMode">查询模板</param> private void m_mthInitQueryDisplayField(clsStatisticDefinitionValue p_objDefinition, clsStatisticQueryModeValue p_objQueryMode) { if (p_objDefinition == null || m_blnIsEmptyString(p_objDefinition.m_strStatistic_ID) || p_objQueryMode == null || m_blnIsEmptyString(p_objQueryMode.m_strSelectedFieldIndexes)) { return; } clsStatisticSelectedFieldValue [] objSelectedFieldArr = (clsStatisticSelectedFieldValue [])m_hasSelectedField[p_objDefinition.m_strStatistic_ID]; if (objSelectedFieldArr == null) { long lngRes = m_objDomain.m_lngGetAllStatisticSelectedField(p_objDefinition.m_strStatistic_ID, out objSelectedFieldArr); if (lngRes <= 0 || objSelectedFieldArr == null || objSelectedFieldArr.Length == 0) { return; } m_hasSelectedField[p_objDefinition.m_strStatistic_ID] = objSelectedFieldArr; } string[] strSelectedFieldsArr = null; if (p_objQueryMode.m_strSelectedFieldIndexes.IndexOf(c_strSplitSelectedFieldSymbol) < 0) { strSelectedFieldsArr = new string[1]; strSelectedFieldsArr[0] = p_objQueryMode.m_strSelectedFieldIndexes.Trim(); } else { strSelectedFieldsArr = p_objQueryMode.m_strSelectedFieldIndexes.Split(c_strSplitSelectedFieldSymbol.ToCharArray()); } for (int i = 0; i < strSelectedFieldsArr.Length; i++) { for (int j2 = 0; j2 < objSelectedFieldArr.Length; j2++) { if (objSelectedFieldArr[j2].m_strFieldName == strSelectedFieldsArr[i]) { m_lsvQueryResult.Columns.Add(objSelectedFieldArr[j2].m_strFieldDesc, 120, HorizontalAlignment.Left); break; } } } }
/// <summary> /// 获取查询类型中定义的参数个数 /// </summary> /// <param name="p_objDefinition">查询类型</param> /// <returns></returns> private int m_intGetDefinitionParametersNum(clsStatisticDefinitionValue p_objDefinition) { int intParametersNum = 0; if (m_blnIsEmptyString(p_objDefinition.m_strOpenClassParameters)) { intParametersNum = 0; } else if (p_objDefinition.m_strOpenClassParameters.IndexOf(",") < 0) { intParametersNum = 1; } else { intParametersNum = p_objDefinition.m_strOpenClassParameters.Split(',').Length; } return(intParametersNum); }
/// <summary> /// 查询 /// </summary> private void m_mthSearch() { m_lsvQueryResult.Items.Clear(); TreeNode trnCurrentQueryMode = trvSearchType.SelectedNode; //判断是否查询模板的节点 if (!m_blnIsQueryModeTreeNode(trnCurrentQueryMode)) { return; } clsStatisticQueryModeValue objQueryMode = (clsStatisticQueryModeValue)trnCurrentQueryMode.Tag; clsStatisticDefinitionValue objDefinition = (clsStatisticDefinitionValue)trnCurrentQueryMode.Parent.Tag; m_mthMakeXmlContentValue(); string [,] strQueryReslutDArr = m_strGetResultArr(objDefinition, objQueryMode); m_mthDisplayResult(objDefinition, strQueryReslutDArr); }
private void m_lsvQueryResult_DoubleClick(object sender, System.EventArgs e) { if (m_lsvQueryResult.SelectedIndices == null || m_lsvQueryResult.SelectedIndices.Count == 0) { return; } TreeNode trnCurrentQueryMode = trvSearchType.SelectedNode; //判断是否查询模板的节点 if (!m_blnIsQueryModeTreeNode(trnCurrentQueryMode)) { return; } clsStatisticDefinitionValue objDefinition = (clsStatisticDefinitionValue)trnCurrentQueryMode.Parent.Tag; m_mthOpenOrderByReflection(objDefinition, (string[, ])m_lsvQueryResult.Tag, m_lsvQueryResult.SelectedIndices[0]); }
/// <summary> /// 初始化已经生成的查询模板 /// </summary> /// <param name="p_trnDefinition">查询模板相对应的查询类型节点。如果节点不是查询类型节点,不做任何操作</param> private void m_mthInitStatisticQueryNode(TreeNode p_trnDefinition) { if (!m_blnIsDefinitionTreeNode(p_trnDefinition)) { return; } //判断是否已经初始化 if (!(p_trnDefinition.Nodes.Count == 1 && p_trnDefinition.Nodes[0].Tag == null)) { return; } clsStatisticDefinitionValue objStatisDefValue = (clsStatisticDefinitionValue)p_trnDefinition.Tag; p_trnDefinition.Nodes.Clear(); clsStatisticQueryModeValue[] objStaticQueryMode; long lngRes = m_objDomain.m_lngGetStatisticQueryMode(objStatisDefValue.m_strStatistic_ID, out objStaticQueryMode); if (lngRes <= 0 || objStaticQueryMode == null || objStaticQueryMode.Length == 0) { return; } for (int i = 0; i < objStaticQueryMode.Length; i++) { TreeNode trnType = new TreeNode(objStaticQueryMode[i].m_strQueryName); trnType.Tag = objStaticQueryMode[i]; p_trnDefinition.Nodes.Add(trnType); } p_trnDefinition.Expand(); }