使用PopupContainerEdit和PopupContainer实现模糊查询

在这里插入图片描述

可以实现拼音,汉字,五笔检索

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Enjoyor.BLL.DrugsStorage;
using Enjoyor.Common.UC;
using Enjoyor.Common.Function;
using System.IO;
using System.Data.SqlClient;
using Enjoyor.UI.DrugsStorage.Report;
using DevExpress.XtraEditors;

namespace Enjoyor.UI.DrugsStorage
{
    public partial class XtraUCDrugsinRepotr : ucBaseControl
    {
        private DevExpress.Utils.WaitDialogForm wdf;
        private DM_druginoutTitleLine _DM_druginoutTitleLine = new DM_druginoutTitleLine();
        private DateTime deSt;
        private DateTime deEd;
        private string IDyp = "";//检索药品ID
        private string IDgs = "";//检索公司ID
        private DrugSearchSP uc = null;
        private DrugSearchSP uc1 = null;
        private PopupContainerEdit pcc = null;


        public XtraUCDrugsinRepotr()
        {
            InitializeComponent();
            dateStart.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
            dateEnd.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            RefreshData();

        }
        /// <summary>
        /// 数据生成
        /// </summary>
        private void RefreshData()
        {
            try
            {
                if (dateStart.DateTime == null || string.IsNullOrEmpty(dateStart.Text.Trim()))
                {
                    MessageHelper.ShowTips("请选择开始时间!");
                    return;
                }
                if (dateEnd.DateTime == null || string.IsNullOrEmpty(dateEnd.Text.Trim()))
                {
                    MessageHelper.ShowTips("请选择结束时间!");
                    return;
                }
                if (string.IsNullOrEmpty(dateEdit1.Text))
                {
                    MessageHelper.ShowTips("请选择药库名称!");
                    return;
                }
                string deptid = "";
                if (dateEdit1.Text.Contains("西药"))
                {
                    deptid = "150";
                }
                else if (dateEdit1.Text.Contains("基药"))
                {
                    deptid = "151";
                }
                else if (dateEdit1.Text.Contains("中药"))
                {
                    deptid = "152";
                }
                deSt = DateTime.Parse(dateStart.DateTime.ToString("yyyy/MM/dd HH:mm:ss"));
                deEd = DateTime.Parse(dateEnd.DateTime.ToString("yyyy/MM/dd HH:mm:ss"));
                //base.ShowWaitDialog(ref wdf, WaitDialogType.Deal);

                DataTable dt = _DM_druginoutTitleLine.Get_DM_druginoutTitle(deSt, deEd, IDyp, IDgs, checkGs.Checked, deptid);
                gvDrugInOutTitleview(checkGs.Checked == false ? "" : checkGs.Checked.ToString(), checkGs.Checked);
                gcDrugInOutTitle.DataSource = dt;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {

            DataTable dt = gcDrugInOutTitle.DataSource as DataTable;
            if (dt == null)
            {

                return;
            }
            dt.Columns.Remove("id");

            DataRow rw = dt.NewRow();

            rw["realsent"] = dt.Compute("sum(realsent)", "").ToString();
            rw["tprice"] = dt.Compute("sum(tprice)", "").ToString();
            rw["tpunits"] = dt.Compute("sum(tpunits)", "").ToString();
            rw["grgs"] = "合计";
            dt.Rows.Add(rw);
            dataTableToCsv(dt, "药库入库明细汇总报表.CSV");
            RefreshData();

        }
        #region 将DataTable内容导出导csv文件
        public static void dataTableToCsv(DataTable table, string file)
        {
            FileInfo fi = new FileInfo(file);
            string path = dataTablezdy(file);//另存为
            string name = fi.Name;
            //\/:*?"<>|
            //把文件名和路径分别取出来处理
            name = name.Replace(@"\", "\");
            name = name.Replace(@"/", "/");
            name = name.Replace(@":", ":");
            name = name.Replace(@"*", "*");
            name = name.Replace(@"?", "?");
            name = name.Replace(@"<", "<");
            name = name.Replace(@">", ">");
            name = name.Replace(@"|", "|");
            string title = "";

            FileStream fs = new FileStream(path + "\\" + name, FileMode.Create);
            StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);

            for (int i = 0; i < table.Columns.Count; i++)
            {
                switch (table.Columns[i].ColumnName)
                {
                    case "drcode":
                        table.Columns[i].ColumnName = "药品编码";
                        break;
                    case "drname":
                        table.Columns[i].ColumnName = "名称";
                        break;
                    case "drmodel":
                        table.Columns[i].ColumnName = "药品规格";
                        break;
                    case "packunit":
                        table.Columns[i].ColumnName = "包装单位";
                        break;
                    case "dilotn":
                        table.Columns[i].ColumnName = "批号";
                        break;
                    case "drmanf":
                        table.Columns[i].ColumnName = "厂家";
                        break;
                    case "npp":
                        table.Columns[i].ColumnName = "进价";
                        break;
                    case "realsent":
                        table.Columns[i].ColumnName = "数量";
                        break;
                    case "mzhs":
                        table.Columns[i].ColumnName = "门诊换算系数";
                        break;
                    case "zyhs":
                        table.Columns[i].ColumnName = "住院换算系数";
                        break;
                    case "sqh":
                        table.Columns[i].ColumnName = "单据号";
                        break;
                    case "grgs":
                        table.Columns[i].ColumnName = "购货公司";
                        break;
                    case "tprice":
                        table.Columns[i].ColumnName = "零售总价";
                        break;
                    case "tpunits":
                        table.Columns[i].ColumnName = "进价总价";
                        break;
                    case "pack":
                        table.Columns[i].ColumnName = "包装规格";
                        break;
                    case "drunit":
                        table.Columns[i].ColumnName = "最小单位";
                        break;
                }
                title += table.Columns[i].ColumnName + ",";
            }
            title = title.Substring(0, title.Length - 1) + "\n";
            sw.Write(title);

            foreach (DataRow row in table.Rows)
            {

                string line = "";
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    line += row[i].ToString().Replace(",", "") + ",";
                }
                if (line.Contains("\n") || line.Contains("\r"))
                {
                    line = line.Replace("\r", "").Replace("\n", "");
                }
                line = line.Substring(0, line.Length - 1) + "\n";

                sw.Write(line);
            }

            sw.Close();
            fs.Close();
        }

        private static string dataTablezdy(string file)
        {

            string filetext = "";
            SaveFileDialog x = new SaveFileDialog();
            x.FileName = file;
            x.Filter = "所有文件(*.*)|*.*";
            if (x.ShowDialog() == DialogResult.OK)
            {
                string filelocal = x.FileName.ToString();
                filetext = filelocal.Substring(0, filelocal.LastIndexOf("\\"));

            }
            else
            {
                FileInfo fi = new FileInfo(file);
                filetext = fi.DirectoryName;
            }
            return filetext;
        }
        #endregion

        private void gvDrugInOutTitle_DoubleClick(object sender, EventArgs e)
        {
            if (gvDrugInOutTitle.DataSource == null || gvDrugInOutTitle.FocusedRowHandle < 0)
            {
                return;
            }
            string Idyp = "";
            string Idgs = "";
            try
            {
                Idgs = gvDrugInOutTitle.GetRowCellValue(gvDrugInOutTitle.FocusedRowHandle, "id").ToString();
                Idyp = gvDrugInOutTitle.GetRowCellValue(gvDrugInOutTitle.FocusedRowHandle, "drcode").ToString();
            }
            catch
            {

            }

            string deptid = "";
            if (dateEdit1.Text.Contains("西药"))
            {
                deptid = "150";
            }
            else if (dateEdit1.Text.Contains("基药"))
            {
                deptid = "151";
            }
            else if (dateEdit1.Text.Contains("中药"))
            {
                deptid = "152";
            }
            bool flag = false;
            flag = gvDrugInOutTitleview(Idyp, flag);
            DataTable dt = _DM_druginoutTitleLine.Get_DM_druginoutTitle(deSt, deEd, Idyp, Idgs, flag, deptid);

            gcDrugInOutTitle.DataSource = dt;
        }
        /// <summary>
        /// 操纵列显示
        /// </summary>
        /// <param name="Idyp"></param>
        /// <param name="flag"></param>
        /// <returns></returns>
        private bool gvDrugInOutTitleview(string Idyp, bool flag)
        {
            if (!string.IsNullOrEmpty(Idyp))
            {
                flag = true;
                for (int i = 0; i < this.gvDrugInOutTitle.Columns.Count; i++)
                {
                    switch (i)
                    {
                        case 8:
                            break;
                        case 9:
                            break;
                        case 10:
                            break;
                        case 14:
                            gvDrugInOutTitle.Columns[i].VisibleIndex = 0;
                            break;
                        default:
                            gvDrugInOutTitle.Columns[i].Visible = false;
                            break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < this.gvDrugInOutTitle.Columns.Count; i++)
                {

                    gvDrugInOutTitle.Columns[i].Visible = true;

                }
            }
            return flag;
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            DataTable dt = gcDrugInOutTitle.DataSource as DataTable;
            if (dt.Columns.Count > 5)
            {
                MessageHelper.ShowTips("只能打印汇总数据!");
                return;
            } if (dt.Rows.Count <= 0)
            {
                MessageHelper.ShowTips("该区间没有数据!");
                return;
            }

            入库汇总_购入公司_ GrgsReport = new 入库汇总_购入公司_();
            GrgsReport.PrintData(dt, Convert.ToString(deSt), Convert.ToString(deEd));

        }

        private void Edit_yp_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            pcc = sender as PopupContainerEdit;
            string strSearch = FilterSymbolStr(e.NewValue.ToString().Trim());
            if (strSearch.Length > 0)
            {
                uc.Getdruginout(strSearch);
                pcc.ShowPopup();
                pcc.Focus();
            }
            else
            {
                pcc.ClosePopup();
            }
            if (string.IsNullOrEmpty(Edit_yp.Text))
            {
                IDyp = "";
            }
        }

        private void XtraUCDrugsinRepotr_Load(object sender, EventArgs e)
        {
            #region 加载下拉框
            PopupContainerControl pccWest = new PopupContainerControl();
            PopupContainerControl pccWest1 = new PopupContainerControl();
            Edit_yp.Properties.PopupControl = pccWest;
            Edit_gs.Properties.PopupControl = pccWest1;
            pccWest.Width = 400;
            pccWest.Height = 300;
            uc = new DrugSearchSP();
            uc.Dock = DockStyle.Fill;
            uc.getRow += new DrugSearchSP.GetRow(Search);
            pccWest.Controls.Add(uc);

            pccWest1.Width = 400;
            pccWest1.Height = 300;
            uc1 = new DrugSearchSP();
            uc1.Dock = DockStyle.Fill;
            uc1.getRow += new DrugSearchSP.GetRow(Search);
            pccWest1.Controls.Add(uc1);
            #endregion
        }
        #region 下拉框选中赋值,调取药品列表
        private void Search(DataRow dr)
        {
            if (dr == null)
            {
                return;
            }
            int i = 0;
            bool flag = int.TryParse(dr["DRCODE"].ToString(), out i);
            if (flag)
            {
                Edit_gs.Text = dr["COMPANY"].ToString().Trim();
                IDgs = dr["DRCODE"].ToString().Trim();
            }
            else
            {
                Edit_yp.Text = dr["DRNAME"].ToString().Trim();
                IDyp = dr["DRCODE"].ToString().Trim();
            }

            pcc.ClosePopup();
        }
        #endregion

        private void Edit_yp_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar >= 48 && e.KeyChar <= 57)
            || (e.KeyChar >= 65 && e.KeyChar <= 90)
            || (e.KeyChar >= 97 && e.KeyChar <= 122)
            || e.KeyChar == 127
            || e.KeyChar == 8)
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
        #region 过滤特殊字符
        public static string FilterSymbolStr(string theString)
        {
            string[] aryReg = { "'", "\"", "\r", "\n", "<", ">", "%", "?", ",", ".", "=", "-", "_", ";", "|", "[", "]", "&", "/" };
            for (int i = 0; i < aryReg.Length; i++)
            {
                theString = theString.Replace(aryReg[i], string.Empty);
            }
            return theString;
        }
        #endregion

        private void Edit_gs_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            pcc = sender as PopupContainerEdit;
            string strSearch = FilterSymbolStr(e.NewValue.ToString().Trim());
            if (strSearch.Length > 0)
            {
                uc1.GetCompany(strSearch);
                pcc.ShowPopup();
                pcc.Focus();
            }
            else
            {
                pcc.ClosePopup();
            }

            if (string.IsNullOrEmpty(Edit_gs.Text))
            {
                IDgs = "";
            }
        }

        private void Edit_gs_KeyPress(object sender, KeyPressEventArgs e)
        {
            Edit_yp_KeyPress(this, e);
        }

    }
}

以上是应用,下面是检索窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Enjoyor.Common.UC;
using Enjoyor.BLL.DrugsStorage;
using Enjoyor.Domain.Entities;
using DevExpress.XtraGrid.Columns;

namespace Enjoyor.UI.DrugsStorage
{
    public partial class DrugSearchSP : UserControl
    {
        public DrugSearchSP()
        {
            InitializeComponent();

            dtDrugUnit = _bllPub.GetDataFromLocal<Dict_drugunit>("Dict_drugunit", false);
        }

        DM_QYKCQuery QYKCQuery = new DM_QYKCQuery();
        private Enjoyor.BLL.PublicMedthodBLL _bllPub = new BLL.PublicMedthodBLL();
        public delegate void GetRow(DataRow dr);
        public event GetRow getRow;

        private string flag;
        private DataTable dtDrugUnit = null;
        private DM_company Company = new DM_company();
        #region 按传递条件查询相关药品数据
        public void GetVDihNew(string str_deptId, string str_key)
        {
            try
            {
                DataRow[] dr = QYKCQuery.GetDihtime(str_deptId, 0).Select("drname like '%" + str_key + "%' or drcode like '%" + str_key + "%' or drsearch11 like '%" + str_key + "%' or drsearch22 like '%" + str_key + "%'");
                DataTable dt = ToDataTable(dr);
                dt.Columns.Add("PACKUNITNM", typeof(string));
              
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        DataRow[] drUnit = dtDrugUnit.Select("CODE='" + dt.Rows[i]["PACKUNIT"].ToString().Trim() + "'");
                        if (drUnit != null && drUnit.Length > 0)
                        {
                            dt.Rows[i]["PACKUNITNM"] = drUnit[0]["UNITNAME"];
                        }
                    }
                }
                gcDrugs.DataSource = dt;
                gcDrugs.Focus();
            }
            catch { }
        }
        #endregion

        #region 按传递条件查询相关药品数据
        public void Getdruginout(string str_key)
        {
            try
            {
            
                DataTable dt = new DM_drugs().GetDrugsMany(str_key);
                dt=dt.DefaultView.ToTable(true, "DRCODE","DRNAME");
                foreach (GridColumn item in gvDrugs.Columns)
                {
                    switch (item.ToString())
                    {
                        case "编码":
                            item.Visible = true;
                            break;
                        case "药品名称":
                            item.Visible = true;
                            break;
                        default:
                            item.Visible = false;
                            break;
                    }
                }
                gcDrugs.DataSource = dt;
                gcDrugs.Focus();
            }
            catch{
                gcDrugs.DataSource = null;
            }
        }
        #endregion

        #region 按传递条件查询相关厂商数据
        public void GetCompany(string str_key)
        {
            try
            {


                DataTable dt = Company.Getcompany(str_key);
                 foreach (GridColumn item in gvDrugs.Columns)
                 {
                     
                   switch (item.ToString())
                    {
                       case "编码":
                            item.Visible = true;
                            break;
                       case "厂商":
                            item.Visible = true;
                            break;
                        default:
                            item.Visible = false;
                            break;
                    }
                 }
                gcDrugs.DataSource = dt;
                gcDrugs.Focus();
            }
            catch
            {
                gcDrugs.DataSource = null;
            }
        }
        #endregion

        #region DataRow[]转换DataTable
        /// <summary>
        /// DataRow[]转换DataTable
        /// </summary>
        /// <param name="rows">DataRow[]</param>
        /// <returns>return DataTable</returns>
        private DataTable ToDataTable(DataRow[] rows)
        {
            if (rows == null || rows.Length == 0) return null;
            DataTable tmp = rows[0].Table.Clone();  // 复制DataRow的表结构  
            foreach (DataRow row in rows)
            {
                tmp.Rows.Add(row.ItemArray);  // 将DataRow添加到DataTable中
            }
            return tmp;
        }
        #endregion

        private void gvDrugs_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                ReturnData();
            }
        }

        private void gvDrugs_DoubleClick(object sender, EventArgs e)
        {
            ReturnData();
        }

        public void ReturnData()
        {
            if (gcDrugs.DataSource != null && gvDrugs.FocusedRowHandle >= 0)
            {
                DataRow dr = gvDrugs.GetDataRow(gvDrugs.FocusedRowHandle);
                if (getRow != null)
                {
                    getRow(dr);
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值