using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; using UAS_MES.DataOperate; using UAS_MES.PublicMethod; namespace UAS_MES.CustomControl.TextBoxWithIcon { public partial class MaCodeSearchTextBox : UserControl { #region 构造函数 public MaCodeSearchTextBox() { InitializeComponent(); } #endregion #region 变量 /// /// 是否通过Leave事件找到数据 /// public bool LeaveFindData; /// /// DBFind窗体弹出的标题 /// private string DBTitle1; /// /// 输入框是否可编辑 /// private bool TextBoxEnable1; /// /// 业务逻辑的标识符 /// private string caller; /// /// 发起DbFind的窗体 /// private string formName; /// /// 需要赋值的字段 /// private string[] setValueField; /// /// 初始的筛选条件 /// private string condition; /// /// 权限标识 /// private string Power1; /// /// 查询的表名 /// private string tableName; /// /// 查询的字段 /// private string selectField; /// /// 设置绑定的CheckBox /// CheckBox LockCheckBox; DbFind db; public override string Text { get { return TextBox.Text; } set { TextBox.Text = value; } } string AllPower1; public string AllPower { get { return AllPower1; } set { AllPower1 = value; } } public string Caller { get { return caller; } set { caller = value; } } public string FormName { get { return formName; } set { formName = value; } } public string[] SetValueField { get { return setValueField; } set { setValueField = value; } } public string Condition { get { return condition; } set { condition = value; } } public string TableName { get { return tableName; } set { tableName = value; } } public string SelectField { get { return selectField; } set { selectField = value; } } public string Power { get { return Power1; } set { Power1 = value; } } public string DBTitle { get { return DBTitle1; } set { DBTitle1 = value; } } public bool TextBoxEnable { get { return TextBoxEnable1; } set { TextBoxEnable1 = value; } } #endregion //DBFind赋值后触发的委托 public delegate void AfterDBFind(object sender, EventArgs e); //事件 public event AfterDBFind AfterDbFind; #region 自定义事件 public delegate void OnTextChange(object sender, EventArgs e); //定义事件 public event OnTextChange UserControlTextChanged; //定义委托 public delegate void Icon_Click(object sender, EventArgs e); /// /// 图标点击事件 /// public event Icon_Click SearchIconClick; #endregion //定义委托 private void TextBox_TextChanged(object sender, EventArgs e) { try { if (db.SuccessReturnData) LockCheckBox.Checked = true; } catch (Exception) { } UserControlTextChanged?.Invoke(sender, new EventArgs()); } //Key先发起失去焦点事件,在执行用户自定义的事件 private void TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { GetData(); } } public void AfterDBFindSetValue(object sender, EventArgs e) { AfterDbFind?.Invoke(sender, new EventArgs()); } public void SetLockCheckBox(CheckBox ctl) { LockCheckBox = ctl; } private void GetData() { if (TextBox.Text != "") { DataHelper dh = new DataHelper(); List fields = new List(); //获取查询的字段 string[] field = selectField.Replace(",", "#").Trim().Split('#'); for (int i = 0; i < field.Length; i++) { if (i % 2 == 0) fields.Add(field[i]); } //将查询到的结果返回界面 string sql = "select " + BaseUtil.AddField(fields.ToArray()) + " from " + tableName + " where " + Tag + "='" + TextBox.Text.ToUpper() + "'"; if (condition != null) { sql += " and " + condition; } DataTable dt = (DataTable)dh.ExecuteSql(sql, "select"); FormCollection fmCollection = Application.OpenForms; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Columns.Count; i++) { for (int j = 0; j < SetValueField.Length; j++) { //利用字段的Tag属性来和列名进行比对 object tag = fmCollection[FormName].Controls[SetValueField[j]].Tag; if (SetValueField[j] == dt.Columns[i].ColumnName.ToLower() || (tag != null && tag == dt.Columns[i].ColumnName.ToLower())) { fmCollection[FormName].Controls[SetValueField[j]].Text = dt.Rows[0][dt.Columns[i].ColumnName].ToString(); } } } LeaveFindData = true; } else LeaveFindData = false; //不允许工单号为空的情况 LockCheckBox.Checked = true; AfterDBFindSetValue(new object(),new EventArgs()); } } private void Search_Icon_Click(object sender, EventArgs e) { SearchIconClick?.Invoke(sender, new EventArgs()); db = new DbFind(Name, tableName, selectField, setValueField, caller, formName, condition); db.Text = DBTitle1; LogManager.DoLog("DbFind查询,发起窗口【" + formName + "】,查询表【" + tableName + "】,字段" + selectField + ",条件" + condition); if (db.IsAbleDbFind1) { db.ShowDialog(); } else { MessageBox.Show("该字段未配置DbFind", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } private void TextBox_Enter(object sender, EventArgs e) { TextBox.BackColor = System.Drawing.Color.GreenYellow; } /// /// 重新刷新数据 /// /// /// public void RefreshDB(object sender, EventArgs e) { TextBox_Leave(sender, e); } public void TextBox_Leave(object sender, EventArgs e) { TextBox.BackColor = System.Drawing.Color.White; if (Enabled) GetData(); } private void SearchTextBox_Load(object sender, EventArgs e) { if (!TextBoxEnable1) TextBox.BackColor = System.Drawing.Color.White; TextBox.Enabled = TextBoxEnable1; } private void SearchTextBox_SizeChanged(object sender, EventArgs e) { TextBox.Width = this.Width - Search_Icon.Width - 3; } } }