using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Lskj.Core; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraGrid.Views.Grid; using System.Reflection; using DevExpress.Data.Filtering; namespace CsHospital.UserControls { public partial class UserSsCzmz : UserControl { public UserSsCzmz() { InitializeComponent(); DBConfig.Instance.CreateConnection(); string sql = string.Format("SELECT lcssbm.bm ,lcssbm.mc ,lcssbm.jp FROM lcssbm where version='国标版2018'"); DataTable SsCzmz = SqlHelper.ExecuteDataTable(sql); this.GridLookUpEdit1.Properties.DataSource = SsCzmz; } public string gid = ""; public delegate void BindText(string data, bool flag,string kname); public event BindText bindText; private void gridLookUpEdit1_Popup(object sender, EventArgs e) { GridLookUpEdit edit = sender as GridLookUpEdit; FilterLookup(sender, new string[] { "mc", "bm", "jp" });//中文,全拼英,简拼 } /// /// 下拉框对象 /// public DevExpress.XtraEditors.GridLookUpEdit GridLookUpEditObj { get { return GridLookUpEdit1; } } private void gridLEdit1_EditValueChanging(object sender, ChangingEventArgs e) { this.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate { FilterLookup(sender, new string[] { "mc", "bm", "jp" }); })); } private void gridLUpEdit1_TextChanged(object sender, EventArgs e) { GridLookUpEdit edit = sender as GridLookUpEdit; edit.SelectionStart = edit.Text.Length; string gname = edit.Text; string sql = string.Format("SELECT lcssbm.bm FROM lcssbm where version='国标版2018' and mc='{0}'", gname); DataTable gTable = SqlHelper.ExecuteDataTable(sql); if (gTable.Rows.Count == 0) { bindText("", false,""); return; } gid = gTable.Rows[0]["bm"].ToString(); bindText(gid, false, gname); } /// /// 拼英模糊查询的关键方法 /// /// /// private void FilterLookup(object sender, string[] arrFilterField) { GridLookUpEdit edit = sender as GridLookUpEdit; GridView gridView = edit.Properties.View as GridView; FieldInfo fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance); CriteriaOperator[] arrCriteriaOperator = new CriteriaOperator[arrFilterField.Length]; for (int i = 0; i < arrFilterField.Length; i++) { arrCriteriaOperator[i] = new BinaryOperator(arrFilterField[i], "%" + edit.AutoSearchText + "%", BinaryOperatorType.Like); } string filterCondition = new GroupOperator(GroupOperatorType.Or, arrCriteriaOperator).ToString(); fi.SetValue(gridView, filterCondition); MethodInfo mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance); mi.Invoke(gridView, null); } private void UserSsCzmz_KeyPress(object sender, KeyPressEventArgs e) { bool isnull = false; GridLookUpEdit gu = sender as GridLookUpEdit; string kname = gu.Text; if (e.KeyChar == (char)Keys.Enter) { if (string.IsNullOrWhiteSpace(gu.Text)) { isnull = true; bindText(gid, isnull, kname); } else { SendKeys.Send("{tab}"); } } } } }