//当按下Query按钮之后执行的事件 protected void OnAfterQuery(AfterQueryEventArgs value) { AfterQueryEventHandler handler = (AfterQueryEventHandler)base.Events[EventOnAfterQuery]; if (handler != null) { handler(this, value); } }
void faq_AfterQuery(object sender, AfterQueryEventArgs e) { OnAfterQuery(e); }
private void buttonQuery_Click(object sender, EventArgs e) { InfoDataSet ids = innerAnyQuery.BindingSource.DataSource as InfoDataSet; if (ids != null) { List<String> detailWhere = new List<string>(); String whereString = String.Empty; String[] remotename = (innerAnyQuery.BindingSource.DataSource as InfoDataSet).RemoteName.Split('.'); String strModuleName = remotename[0]; String strTableName = remotename[1]; String tablename = CliUtils.GetTableName(strModuleName, strTableName, CliUtils.fCurrentProject); String detailtablename = String.Empty; String strDetailTableName = String.Empty; if (innerAnyQuery.DetailBindingSource != null) { DataView dataView = innerAnyQuery.DetailBindingSource.List as DataView; if (dataView != null) { strDetailTableName = dataView.Table.TableName; } else { int iRelationPos = -1; DataSet dSet = ((InfoDataSet)innerAnyQuery.DetailBindingSource.GetDataSource()).RealDataSet; for (int i = 0; i < dSet.Relations.Count; i++) { if (innerAnyQuery.DetailBindingSource.DataMember == dSet.Relations[i].RelationName) { iRelationPos = i; break; } } if (iRelationPos != -1) { strDetailTableName = dSet.Relations[iRelationPos].ChildTable.TableName; } } detailtablename = CliUtils.GetTableName(strModuleName, strDetailTableName, CliUtils.fCurrentProject); //if (!detailtablename.Contains("[") && !detailtablename.Contains("}")) //{ // detailtablename = String.Format("[{0}]", detailtablename); //} } String[] quote = CliUtils.GetDataBaseQuote(); for (int i = 1; i <= Count; i++) { String strWhere = String.Empty; foreach (DataColumn dc in ids.RealDataSet.Tables[0].Columns) { String caption = String.Empty; String columnName = String.Empty; String operatorMask = String.Empty; String value1 = String.Empty; String value2 = String.Empty; Type valueType = null; String condition = String.Empty; object realValue1 = null; object realValue2 = null; bool DateConver = false; CheckBox cbActive = this.panel2.Controls[i + "AnyQueryActiveCheckBox"] as CheckBox; if (!cbActive.Checked) break; ComboBox cbColumn = this.panel2.Controls[i + "AnyQueryColumnComboBox"] as ComboBox; caption = cbColumn.Text; columnName = cbColumn.SelectedValue.ToString(); if (columnName != CliUtils.GetTableNameForColumn(masterSql, dc.ColumnName)) continue; valueType = dc.DataType; bool isNvarChar = false; foreach (AnyQueryColumns aqc in innerAnyQuery.Columns) { if (aqc.Column == dc.ColumnName) { isNvarChar = aqc.IsNvarChar; break; } } String nvarCharMark = valueType == typeof(string) && isNvarChar ? "N" : string.Empty; Control[] tempCondition = this.Controls.Find(this.cbCondition.Name, true); condition = tempCondition[0].Text; ComboBox cbOperator = this.panel2.Controls[i + "AnyQueryOperatorComboBox"] as ComboBox; operatorMask = cbOperator.Text; DateConver = GetDataConver(dc.ColumnName); foreach (Control c in this.panel2.Controls) { if (c.Name.StartsWith(i + "AnyQueryValue1")) { if (c.Name.StartsWith(i + "AnyQueryValue1CheckBox")) { if (valueType == typeof(bool)) { if ((c as CheckBox).Checked) value1 = "1"; else value1 = "0"; } else { if ((c as CheckBox).Checked) value1 = "'Y'"; else value1 = "'N'"; } } else if (c.Name.StartsWith(i + "AnyQueryValue1RefTextBox")) { if (operatorMask == "IN" || operatorMask == "NOT IN") { String[] temp = (c as InfoRefbuttonBox).RealValue.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } } else { value1 = (c as InfoRefbuttonBox).RealValue; value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); realValue1 = (c as InfoRefbuttonBox).RealValue; } } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoRefvalBox")) { if (operatorMask == "IN" || operatorMask == "NOT IN") { String[] temp = (c as InfoRefvalBox).TextBoxSelectedValue.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } realValue1 = (c as InfoRefvalBox).TextBoxSelectedValue; } else { value1 = (c as InfoRefvalBox).TextBoxSelectedValue; value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); realValue1 = (c as InfoRefvalBox).TextBoxSelectedValue; } } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoDateTimePicker")) { if ((c as InfoDateTimePicker).Checked) { value1 = (c as InfoDateTimePicker).Value.ToString("yyyy/MM/dd"); value1 = Mark(valueType, columnName, operatorMask, value1, DateConver, nvarCharMark); realValue1 = Convert.ToDateTime((c as InfoDateTimePicker).Value); } } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoComboBox")) { if ((c as InfoComboBox).SelectedValue != null) { value1 = IsLike(operatorMask, (c as InfoComboBox).SelectedValue.ToString()); realValue1 = (c as InfoComboBox).SelectedValue.ToString(); } else { value1 = IsLike(operatorMask, (c as InfoComboBox).Text); realValue1 = (c as InfoComboBox).Text; } value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); } else { if (operatorMask == "IN" || operatorMask == "NOT IN") { String[] temp = c.Text.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } realValue1 = c.Text; } else { value1 = IsLike(operatorMask, c.Text); value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); realValue1 = c.Text; } } break; } } if (value1 == String.Empty) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueNull"); MessageBox.Show(String.Format(message, caption)); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } if (operatorMask == "IN" || operatorMask == "NOT IN") value1 = String.Format("({0})", value1); if (operatorMask == "<->" || operatorMask == "!<->") { foreach (Control c in this.panel2.Controls) { if (c.Name.StartsWith(i + "AnyQueryValue2InfoRefvalBox")) { value2 = (c as InfoRefvalBox).TextBoxSelectedValue; value2 = Mark(valueType, dc.ColumnName, operatorMask, value2, DateConver, nvarCharMark); realValue2 = (c as InfoRefvalBox).TextBoxSelectedValue; break; } else if (c.Name.StartsWith(i + "AnyQueryValue2InfoDateTimePicker")) { if ((c as InfoDateTimePicker).Checked) { value2 = (c as InfoDateTimePicker).Value.ToString("yyyy/MM/dd"); value2 = Mark(valueType, columnName, operatorMask, value2, DateConver, nvarCharMark); realValue2 = Convert.ToDateTime((c as InfoDateTimePicker).Value); //value2 = (c as InfoDateTimePicker).Value.AddDays(1).AddSeconds(-1).ToString(); //realValue2 = Convert.ToDateTime((c as InfoDateTimePicker).Value.AddDays(1).AddSeconds(-1)); break; } } else if (c.Name.StartsWith(i + "AnyQueryValue2")) { value2 = c.Text; value2 = Mark(valueType, dc.ColumnName, operatorMask, value2, DateConver, nvarCharMark); realValue2 = c.Text; break; } } } if (String.IsNullOrEmpty(value2)) { value2 = value1; realValue2 = realValue1; } if (caption != String.Empty) { if (dc.DataType != typeof(DateTime) || !DateConver) { if (operatorMask == "<->") { if (realValue2 != null) { bool flag = false; if (realValue2 is DateTime && ((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; else if (realValue2 is Int32 && Convert.ToInt32(realValue2) < Convert.ToInt32(realValue1)) flag = true; if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = columnName + ">=" + value1 + " AND " + columnName + "<=" + value2; } else if (operatorMask == "!<->") { if (realValue2 != null) { bool flag = false; if (realValue2 is DateTime && ((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; else if (realValue2 is Int32 && Convert.ToInt32(realValue2) < Convert.ToInt32(realValue1)) flag = true; if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = columnName + "<" + value1 + " OR " + columnName + ">" + value2; } else if (operatorMask == "%**" || operatorMask == "**%" || operatorMask == "%%") strWhere = columnName + " like " + value1; else if (operatorMask == "!%%") strWhere = columnName + " not like " + value1; else strWhere = columnName + " " + operatorMask + " " + value1; } else { if (operatorMask == "<->") { if (realValue2 != null) { bool flag = false; if (realValue2 is DateTime) { if (((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; } else if (Convert.ToInt32(realValue2) < Convert.ToInt32(realValue1)) flag = true; if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = value1.Replace("<->", ">=") + " AND " + value2.Replace("<->", "<="); } else if (operatorMask == "!<->") { if (realValue2 != null) { bool flag = false; if (realValue2 is DateTime) { if (((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; } else if (Convert.ToInt32(realValue2) < Convert.ToInt32(realValue1)) flag = true; if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = value1.Replace("<->", "<") + " OR " + value2.Replace("<->", ">"); } else strWhere = value1; } strWhere = String.Format("({0})", strWhere); whereString += strWhere + " " + condition + " "; break; } } if (strDetailTableName != String.Empty && ids.RealDataSet.Tables[strDetailTableName] != null) { foreach (DataColumn dc in ids.RealDataSet.Tables[strDetailTableName].Columns) { String caption = String.Empty; String columnName = String.Empty; String operatorMask = String.Empty; String value1 = String.Empty; String value2 = String.Empty; Type valueType = null; String condition = String.Empty; object realValue1 = null; object realValue2 = null; bool DateConver = false; CheckBox cbActive = this.panel2.Controls[i + "AnyQueryActiveCheckBox"] as CheckBox; if (!cbActive.Checked) break; ComboBox cbColumn = this.panel2.Controls[i + "AnyQueryColumnComboBox"] as ComboBox; caption = cbColumn.Text; columnName = cbColumn.SelectedValue.ToString(); if (detailSql == String.Empty) continue; if (columnName != CliUtils.GetTableNameForColumn(detailSql, dc.ColumnName)) continue; valueType = dc.DataType; bool isNvarChar = false; foreach (AnyQueryColumns aqc in innerAnyQuery.Columns) { if (aqc.Column == dc.ColumnName) { isNvarChar = aqc.IsNvarChar; break; } } String nvarCharMark = valueType == typeof(string) && isNvarChar ? "N" : string.Empty; Control[] tempCondition = this.Controls.Find(this.cbCondition.Name, true); condition = tempCondition[0].Text; ComboBox cbOperator = this.panel2.Controls[i + "AnyQueryOperatorComboBox"] as ComboBox; operatorMask = cbOperator.Text; DateConver = GetDataConver(dc.ColumnName); foreach (Control c in this.panel2.Controls) { if (c.Name.StartsWith(i + "AnyQueryValue1")) { if (c.Name.StartsWith(i + "AnyQueryValue1CheckBox")) { if (valueType == typeof(bool)) { if ((c as CheckBox).Checked) value1 = "1"; else value1 = "0"; } else { if ((c as CheckBox).Checked) value1 = "'Y'"; else value1 = "'N'"; } } else if (c.Name.StartsWith(i + "AnyQueryValue1RefTextBox")) { String[] temp = (c as InfoRefbuttonBox).RealValue.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoRefvalBox")) { String[] temp = (c as InfoRefvalBox).TextBoxSelectedValue.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } realValue1 = (c as InfoRefvalBox).TextBoxSelectedValue; } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoDateTimePicker")) { if ((c as InfoDateTimePicker).Checked) { value1 = (c as InfoDateTimePicker).Value.ToString("yyyy/MM/dd"); value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); realValue1 = Convert.ToDateTime((c as InfoDateTimePicker).Value); } } else if (c.Name.StartsWith(i + "AnyQueryValue1InfoComboBox")) { if ((c as InfoComboBox).SelectedValue != null) { value1 = IsLike(operatorMask, (c as InfoComboBox).SelectedValue.ToString()); realValue1 = (c as InfoComboBox).SelectedValue.ToString(); } else { value1 = IsLike(operatorMask, (c as InfoComboBox).Text); realValue1 = (c as InfoComboBox).Text; } value1 = Mark(valueType, dc.ColumnName, operatorMask, value1, DateConver, nvarCharMark); } else { String[] temp = c.Text.Split(','); for (int j = 0; j < temp.Length; j++) { if (temp[j] != String.Empty) { temp[j] = IsLike(operatorMask, temp[j]); value1 += Mark(valueType, dc.ColumnName, operatorMask, temp[j], DateConver, nvarCharMark) + ","; } } if (value1.EndsWith(",")) { value1 = value1.Remove(value1.LastIndexOf(",")); } realValue1 = c.Text; } break; } } if (value1 == String.Empty) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueNull"); MessageBox.Show(String.Format(message, caption)); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } if (operatorMask == "IN" || operatorMask == "NOT IN") value1 = String.Format("({0})", value1); if (operatorMask == "<->" || operatorMask == "!<->") { foreach (Control c in this.panel2.Controls) { if (c.Name.StartsWith(i + "AnyQueryValue2InfoRefvalBox")) { value2 = (c as InfoRefvalBox).TextBoxSelectedValue; realValue2 = (c as InfoRefvalBox).TextBoxSelectedValue; break; } else if (c.Name.StartsWith(i + "AnyQueryValue2InfoDateTimePicker")) { if ((c as InfoDateTimePicker).Checked) { value2 = (c as InfoDateTimePicker).Value.ToString("yyyy/MM/dd"); realValue2 = Convert.ToDateTime((c as InfoDateTimePicker).Value); break; } } else if (c.Name.StartsWith(i + "AnyQueryValue2")) { value2 = c.Text; realValue2 = c.Text; break; } } value2 = Mark(valueType, dc.ColumnName, operatorMask, value2, DateConver, nvarCharMark); } if (caption != String.Empty) { if (dc.DataType != typeof(DateTime) || !DateConver) { if (operatorMask == "<->") { if (realValue2 != null) { bool flag = false; int iRealValue1 = 0; int iRealValue2 = 0; if (realValue2 is DateTime) { if (((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; } else if (int.TryParse(realValue1.ToString(), out iRealValue1) && int.TryParse(realValue2.ToString(), out iRealValue2)) { if (iRealValue2 < iRealValue1) flag = true; } if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = columnName + ">=" + value1 + " AND " + columnName + "<=" + value2; } else if (operatorMask == "!<->") { if (realValue2 != null) { bool flag = false; int iRealValue1 = 0; int iRealValue2 = 0; if (realValue2 is DateTime) { if (((DateTime)realValue2).Date < ((DateTime)realValue1).Date) flag = true; } else if (int.TryParse(realValue1.ToString(), out iRealValue1) && int.TryParse(realValue2.ToString(), out iRealValue2)) { if (iRealValue2 < iRealValue1) flag = true; } if (flag) { string message = SysMsg.GetSystemMessage(CliUtils.fClientLang, "Srvtools", "AnyQuery", "ValueOverFlow"); MessageBox.Show(message); this.DialogResult = System.Windows.Forms.DialogResult.None; return; } } strWhere = columnName + "<" + value1 + " OR " + columnName + ">" + value2; } else if (operatorMask == "%**" || operatorMask == "**%" || operatorMask == "%%") strWhere = columnName + " like " + value1; else if (operatorMask == "!%%") strWhere = columnName + " not like " + value1; else strWhere = columnName + " " + operatorMask + " " + value1; } strWhere = String.Format("({0})", strWhere); detailWhere.Add(strWhere); break; } } } } if (detailWhere.Count > 0) { String strDetail = String.Empty; foreach (String str in detailWhere) { Control[] tempCondition = this.Controls.Find(this.cbCondition.Name, true); strDetail += str + tempCondition[0].Text; } if (strDetail.EndsWith("OR")) strDetail = strDetail.Remove(strDetail.LastIndexOf("OR")); else if (strDetail.EndsWith("AND")) strDetail = strDetail.Remove(strDetail.LastIndexOf("AND")); //if (detailtablename.Contains(" ") && !detailtablename.Contains("[")) detailtablename = "[" + detailtablename + "]"; String[] detailTemp = detailSql.Split(new string[] { "SELECT", "FROM", "WHERE" }, StringSplitOptions.RemoveEmptyEntries); if (String.IsNullOrEmpty(innerAnyQuery.MasterDetailField)) innerAnyQuery.MasterDetailField = innerAnyQuery.DetailKeyField; whereString += String.Format("{3} in (SELECT {1} FROM {0} WHERE {2})", detailTemp[1], innerAnyQuery.DetailKeyField, strDetail, innerAnyQuery.MasterDetailField); if (detailTemp.Length > 2) whereString += " and " + detailTemp[2]; } if (whereString.EndsWith("OR ")) whereString = whereString.Remove(whereString.LastIndexOf("OR ")); else if (whereString.EndsWith("AND ")) whereString = whereString.Remove(whereString.LastIndexOf("AND ")); Where = whereString; if (aInfoNavigator != null && !aInfoNavigator.QuerySQLSend) { aInfoNavigator.OnQueryConfirm(new QueryConfirmEventArgs(Where)); } else if (isExecute) { AfterQueryEventArgs aqe = new AfterQueryEventArgs(); aqe.whereString = whereString; OnAfterQuery(aqe); if (!aqe.Cancel) ids.SetWhere(aqe.whereString); } } if (Where == String.Empty) Where = "1=1"; this.DialogResult = System.Windows.Forms.DialogResult.Yes; this.Close(); }