using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; using Gs.DevApp.Entity; using Gs.DevApp.ToolBox; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Gs.DevApp.UserControl { public partial class ShowFilter : XtraForm { private readonly GridColumnCollection _columns; private readonly string _fullName; /// /// /// /// 列名 /// 默认值 /// 类名 public ShowFilter(GridColumnCollection Columns, List list = null, string FullName = "") { FilterList = list; _columns = Columns; _fullName = FullName; InitializeComponent(); repositoryItemComboBox1.ParseEditValue += RepositoryItemComboBox1_ParseEditValue; repositoryItemComboBox2.ParseEditValue += RepositoryItemComboBox2_ParseEditValue; gridView1.OptionsFind.ShowSearchNavButtons = false; gridView1.OptionsView.ShowGroupPanel = false; gvQuery.OptionsView.ShowGroupPanel = false; gvTable.OptionsView.ShowGroupPanel = false; btnEsc.Click += BtnEsc_Click; btnQuery.Click += BtnQuery_Click; // gridView1.IndicatorWidth = gvTable.IndicatorWidth = gvQuery.IndicatorWidth = 50; gridView1.CustomDrawRowIndicator += (s, e) => { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); }; gvTable.CustomDrawRowIndicator += (s, e) => { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); }; gvQuery.CustomDrawRowIndicator += (s, e) => { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); }; getPageList(); //下面为查询配置 this.btnSqlTable.Click += BtnSqlTable_Click; xtraTabControl1.SelectedPageChanged += (s, e) => { if (xtraTabControl1.SelectedTabPageIndex == 1) getPageListQuery(); }; } /// /// 查询集合 /// public List FilterList { get; set; } /// /// 回调事件 /// public event EventHandler UpdateParent; private void BtnQuery_Click(object sender, EventArgs e) { gridView1.CloseEditor(); gridView1.UpdateCurrentRow(); var sbWhere = new StringBuilder(); var list = new List(); for (var i = 0; i < gridView1.DataRowCount; i++) { if (string.IsNullOrEmpty(gridView1.GetRowCellValue(i, "field") .ToString()) || string.IsNullOrEmpty(gridView1 .GetRowCellValue(i, "fieldWhere").ToString()) || string.IsNullOrEmpty(gridView1 .GetRowCellValue(i, "fieldValue").ToString()) ) continue; string _fieId, _fileIdDec; (_fieId, _fileIdDec) = _getFiled(gridView1.GetRowCellValue(i, "field").ToString()); string _fileWhere, _fileWhereDec; (_fileWhere, _fileWhereDec) = _getFiled(gridView1 .GetRowCellValue(i, "fieldWhere").ToString()); var _fieldValue = gridView1.GetRowCellValue(i, "fieldValue") .ToString(); var _fieldType = gridView1.GetRowCellValue(i, "fieldType") .ToString(); if (_fileWhere.Contains("like")) { _fileWhere = " like "; _fieldValue = "%" + _fieldValue + "%"; } list.Add(new FilterEntity(_fieId, _fileIdDec, _fileWhere, _fileWhereDec, _fieldValue, _fieldType)); } UpdateParent?.Invoke(this, new UpdateParentEventArgs { FilterList = list }); Close(); } /// /// private void getPageList() { foreach (GridColumn col in _columns) if (col.Tag != null && !string.IsNullOrEmpty(col.Tag.ToString())) { var item = new CboItemEntity(); item.Text = col.Tag.ToString() + "(" + col.Caption + ")"; //item.Value = col.FieldName; item.Value = col.Tag.ToString(); item.FType = col.UnboundExpression; repositoryItemComboBox1.Items.Add(item); } var d2 = new Dictionary(); d2.Add(">", "大于"); d2.Add("<", "小于"); d2.Add("=", "等于"); d2.Add("<>", "不等于"); d2.Add("like", "包含"); foreach (var kvp in d2) { var item = new CboItemEntity(); item.Text = kvp.Key + "(" + kvp.Value + ")"; item.Value = kvp.Key; repositoryItemComboBox2.Items.Add(item); } try { var dt = new DataTable(); dt.Columns.Add("field", typeof(string)); dt.Columns.Add("fieldWhere", typeof(string)); dt.Columns.Add("fieldValue", typeof(string)); dt.Columns.Add("fieldType", typeof(string)); foreach (var _sql in FilterList) { var dr = dt.NewRow(); dr["field"] = _sql.fileId + "(" + _sql.fileIdDec; dr["fieldWhere"] = _sql.fileOper + "(" + _sql.fileOperDec; dr["fieldValue"] = _sql.fileValue.Replace("%", ""); dr["fieldType"] = _sql.fileType; dt.Rows.Add(dr); } gcMain.BindingContext = new BindingContext(); gcMain.DataSource = dt; gcMain.ForceInitialize(); } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } private (string, string) _getFiled(string _field) { return (_field.Split('(')[0], _field.Split('(')[1]); } private void BtnEsc_Click(object sender, EventArgs e) { Close(); } private void RepositoryItemComboBox2_ParseEditValue(object sender, ConvertEditValueEventArgs e) { if (e.Value != null) { e.Value = e.Value.ToString(); e.Handled = true; } } private void RepositoryItemComboBox1_ParseEditValue(object sender, ConvertEditValueEventArgs e) { if (e.Value != null) { e.Value = e.Value.ToString(); e.Handled = true; } } private void repositoryItemComboBox1_SelectedValueChanged(object sender, EventArgs e) { ComboBoxEdit comboBox = sender as ComboBoxEdit; if (comboBox != null) { CboItemEntity _itm = comboBox.EditValue as CboItemEntity; string dddd = _itm.Value.ToString(); string ccc = _itm.Text.ToString(); string yyy = _itm.FType.ToString(); GridView myView = (gcMain.MainView as GridView); int dataIndex = myView.GetDataSourceRowIndex(myView.FocusedRowHandle); myView.CloseEditor(); myView.UpdateCurrentRow(); myView.SetRowCellValue(dataIndex, "fieldType", yyy); } } /// /// 移出一个查询条件 /// /// /// private void repositoryItemButtonEdit1_ButtonClick(object sender, ButtonPressedEventArgs e) { gridView1.CloseEditor(); gridView1.UpdateCurrentRow(); var rowhandle = gridView1.FocusedRowHandle; if (rowhandle < 0) return; if (e.Button.Index == 0) { var dr = gridView1.GetDataRow(rowhandle); gridView1.DeleteRow(rowhandle); return; } } #region 这里是高级管理员使用的 /// /// 保存绑定的表 /// /// /// private void BtnSqlTable_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(_fullName)) { Gs.DevApp.ToolBox.MsgHelper.Warning("请选择页面!"); return; } var _obj = new { formPath = _fullName, list = new List(), }; gvTable.CloseEditor(); gvTable.UpdateCurrentRow(); if (gvTable.DataRowCount <= 0) { MsgHelper.ShowError("明细不能为空,请选择你的明细!"); return; } for (var i = 0; i < gvTable.DataRowCount; i++) { var row = gvTable.GetDataRow(i); if (row != null) { string _msl = row["tableOtherName"].ToString(); if (string.IsNullOrEmpty(_msl)) { MsgHelper.ShowError("别名不能为空!"); return; } _obj.list.Add(new { tableName = (row["tableName"].ToString()), tableOtherName = row["tableOtherName"].ToString(), }); } } try { string strJson = UtilityHelper.HttpPost("", "Fm/EditQuery", JsonConvert.SerializeObject(_obj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnData.outMsg); if (_rtn.rtnCode > 0) { getPageListQuery(); } } catch (Exception ex) { ToolBox.MsgHelper.Warning("提示:" + ex.Message); } } /// /// 删除绑定表 /// /// /// private void repositoryItemButtonEdit2_ButtonClick(object sender, ButtonPressedEventArgs e) { gvTable.CloseEditor(); gvTable.PostEditor(); gvTable.UpdateCurrentRow(); var rowhandle = gvTable.FocusedRowHandle; if (rowhandle < 0) return; if (e.Button.Index == 0) { var dr = gvTable.GetDataRow(rowhandle); var mxGuid = dr["guid"].ToString(); if (!MsgHelper.AskQuestion("你选择了1条数据,确定删除吗?")) return; if (string.IsNullOrEmpty(mxGuid)) { gvTable.DeleteRow(rowhandle); return; } var _obj = new { guid = mxGuid, }; try { var strJson = UtilityHelper.HttpPost("", "Fm/DeleteQuery", JsonConvert.SerializeObject(_obj)); var _rtn = UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode > 0) { getPageListQuery(); } MsgHelper.Warning("提示:" + _rtn.rtnMsg); } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } } /// /// 读取绑定 /// private void getPageListQuery() { var _obj = new { formPath = this._fullName, list = new List(), }; foreach (GridColumn col in _columns) { _obj.list.Add(new { colName = col.Name.ToString(), colCap = col.Caption }); } try { var strJson = UtilityHelper.HttpPost("", "Fm/GetQuery", JsonConvert.SerializeObject(_obj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); JObject _job = JObject.Parse(strJson); //读前选择 JArray array00 = new JArray(); foreach (var a in _job["rtnData"]["list3"]) { array00.Add(a); } DataTable dt00 = JsonConvert.DeserializeObject(array00.ToString()); this.repositoryItemSearchLookUpEdit1.DataSource = dt00; //读前选择 JArray array01 = new JArray(); foreach (var a in _job["rtnData"]["list4"]) { array01.Add(a); } DataTable dt01 = JsonConvert.DeserializeObject(array01.ToString()); repositoryItemSearchLookUpEdit2Sql.DataSource = dt01; //////////// JArray array = new JArray(); foreach (var a in _job["rtnData"]["list"]) { array.Add(a); } DataTable dt = JsonConvert.DeserializeObject(array.ToString()); if (dt.Rows.Count > 0) { gcTable.BindingContext = new BindingContext(); gcTable.DataSource = dt; gcTable.ForceInitialize(); gvTable.BestFitColumns(); } else { Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcTable, gvTable); } //////////// JArray array2 = new JArray(); foreach (var a in _job["rtnData"]["list2"]) { array2.Add(a); } DataTable dt2 = JsonConvert.DeserializeObject(array2.ToString()); gcQuery.BindingContext = new BindingContext(); gcQuery.DataSource = dt2; gcQuery.ForceInitialize(); gvQuery.BestFitColumns(); } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } private void repositoryItemSearchLookUpEdit1_EditValueChanged(object sender, EventArgs e) { SearchLookUpEdit LookupEdit = sender as SearchLookUpEdit; DataRowView SelectedDataRow = (DataRowView)LookupEdit.GetSelectedDataRow(); gvTable.SetFocusedRowCellValue("tableName", SelectedDataRow["tableName"].ToString()); gvTable.SetFocusedRowCellValue("tableCap", SelectedDataRow["tableCap"].ToString()); gvTable.CloseEditor(); gvTable.PostEditor(); gvTable.UpdateCurrentRow(); } /// /// 编辑列查询 /// /// /// private void repositoryItemComboBox3Sql_EditValueChanged(object sender, EventArgs e) { ComboBoxEdit comboBox = sender as ComboBoxEdit; if (comboBox != null) { GridView myView = (gcQuery.MainView as GridView); int dataIndex = myView.GetDataSourceRowIndex(myView.FocusedRowHandle); string _txt = comboBox.Text.Trim(); var dr = myView.GetDataRow(dataIndex); var mxGuid = dr["guid"].ToString(); if (mxGuid.Length > 0) { var _obj = new { guid = mxGuid, fType = 1, sqlFieldType = _txt }; try { var strJson = UtilityHelper.HttpPost("", "Fm/EditCol", JsonConvert.SerializeObject(_obj)); var _rtn = UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode <= 0) { MsgHelper.ShowError("提示:" + _rtn.rtnMsg); } } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } } } /// /// 编辑列查询 /// /// /// private void repositoryItemSearchLookUpEdit2Sql_EditValueChanged(object sender, EventArgs e) { string _txt = ""; SearchLookUpEdit LookupEdit = sender as SearchLookUpEdit; DataRowView SelectedDataRow = (DataRowView)LookupEdit.GetSelectedDataRow(); if (SelectedDataRow != null) _txt = SelectedDataRow["tableOtherName"].ToString(); GridView myView = (gcQuery.MainView as GridView); int dataIndex = myView.GetDataSourceRowIndex(myView.FocusedRowHandle); var dr = myView.GetDataRow(dataIndex); var mxGuid = dr["guid"].ToString(); gvQuery.SetFocusedRowCellValue("sqlField", _txt); gvQuery.CloseEditor(); gvQuery.PostEditor(); gvQuery.UpdateCurrentRow(); if (mxGuid.Length > 0) { var _obj = new { guid = mxGuid, sqlField = _txt, fType = 0, }; try { var strJson = UtilityHelper.HttpPost("", "Fm/EditCol", JsonConvert.SerializeObject(_obj)); var _rtn = UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode <= 0) { MsgHelper.ShowError("提示:" + _rtn.rtnMsg); } } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } } #endregion } }