using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AIMSBLL;
using AIMSModel;
namespace AIMS.PublicUI.UI
{
    public partial class frmAnaesthesiaDrugSelect : Form
    {
        /// 
        /// 可用的器械
        /// 
        public DataTable dt;
        /// 
        /// 已选择的器械
        /// 
        public DataTable ydt;
        /// 
        /// 当前页数
        /// 
        int currentPage = 0;
        /// 
        /// 总数
        /// 
        int total = 0;
        /// 
        /// 总页数
        /// 
        int pages = 0;
        /// 
        /// 
        /// 
        public int AnaesthesiaEventsId;
        private AnaesthesiaEvents AnaesthesiaEvents;
        public frmAnaesthesiaDrugSelect()
        {
            InitializeComponent();
        }
        private void frmApplianceSelect_Load(object sender, EventArgs e)
        {
            AnaesthesiaEvents = BAnaesthesiaEvents.SelectSingle(AnaesthesiaEventsId);
            dgvD.AutoGenerateColumns = false;
            dgvY.AutoGenerateColumns = false;
            dt = BDrugs.SelectIdName("");
            ydt = BDrugs.GetDrugsByIds(AnaesthesiaEvents.TheEventsId);
            BindDgvY(ydt);
            cboType_SelectedIndexChanged(null, null);
        }
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void BindDgvY(DataTable dt)
        {
            dgvY.AutoGenerateColumns = false;
            dgvY.Rows.Clear();
            foreach (DataRow dr in dt.Rows)
            {
                int index = this.dgvY.Rows.Add();
                this.dgvY.Rows[index].Cells["yId"].Value = dr["Id"].ToString();
                this.dgvY.Rows[index].Cells["yName"].Value = dr["Name"].ToString();
                this.dgvY.Rows[index].Cells["yspec"].Value = dr["Stand"].ToString();
                if (dr["UseDose1"] != null && dr["UseDose1"].ToString() != "") this.dgvY.Rows[index].Cells["DOSEPER"].Value = SetDOSEPER(dr["UseDose1"].ToString());
                if (dr["UseDose2"] != null && dr["UseDose2"].ToString() != "") this.dgvY.Rows[index].Cells["DOSEPER2"].Value = SetDOSEPER(dr["UseDose2"].ToString());
                if (dr["UseDose3"] != null && dr["UseDose3"].ToString() != "") this.dgvY.Rows[index].Cells["DOSEPER3"].Value = SetDOSEPER(dr["UseDose3"].ToString());
            }
        }
        private void BindDgv(DataTable dt)
        {
            dgvD.AutoGenerateColumns = false;
            dgvD.Rows.Clear();
            int num = 1;
            foreach (DataRow dr in dt.Rows)
            {
                int index = this.dgvD.Rows.Add();
                this.dgvD.Rows[index].Cells["Id"].Value = dr["Id"].ToString();
                this.dgvD.Rows[index].Cells["Index"].Value = num;
                num++;
                this.dgvD.Rows[index].Cells["oName"].Value = dr["Name"].ToString() +" "+ dr["Price"].ToString();
                this.dgvD.Rows[index].Cells["dDOSEPER"].Value = dr["UseDose1"].ToString();
                this.dgvD.Rows[index].Cells["dDOSEPER2"].Value = dr["UseDose2"].ToString();
                this.dgvD.Rows[index].Cells["dDOSEPER3"].Value = dr["UseDose3"].ToString();
                this.dgvD.Rows[index].Cells["ospec"].Value = dr["Stand"].ToString();
            }
        }
        private void cboType_SelectedIndexChanged(object sender, EventArgs e)
        {
            currentPage = 0;
            dt = BDrugs.SelectIdName("");
            SetPageText(dt);
            BindDgv(GetTableByCurrentPage(currentPage, dt));
        }
        private void SetPageText(DataTable table)
        {
            total = table.Rows.Count;
            if (total % 10 == 0)
            {
                pages = total / 10;
            }
            else
            {
                pages = total / 10 + 1;
            }
            lblPage.Text = currentPage + 1 + "/" + pages + ",共" + total + "条";
        }
        /// 
        /// 得到某页的DataTable
        /// 
        /// 当前页
        /// 获取数据的DataTable
        /// 某一页的DataTable
        private DataTable GetTableByCurrentPage(int currPage, DataTable dt)
        {
            DataTable pdt = dt.Clone();
            int index = currPage * 10;
            for (int i = index; i < index + 10; i++)
            {
                if (i == total)
                {
                    break;
                }
                DataRow dr = pdt.NewRow();
                dr["Id"] = Convert.ToInt32(dt.Rows[i]["Id"]);
                dr["Name"] = dt.Rows[i]["Name"].ToString();
                dr["UseDose1"] = dt.Rows[i]["UseDose1"];
                dr["UseDose2"] = dt.Rows[i]["UseDose2"];
                dr["UseDose3"] = dt.Rows[i]["UseDose3"];
                dr["Stand"] = dt.Rows[i]["Stand"];
                dr["Price"] = dt.Rows[i]["Price"];
                pdt.Rows.Add(dr);
            }
            return pdt;
        }
        private void txtQuery_TextChanged(object sender, EventArgs e)
        {
            dt = BDrugs.SelectIdName(txtQuery.Text);
            currentPage = 0;
            SetPageText(dt);
            BindDgv(GetTableByCurrentPage(currentPage, dt));
        }
        private void lkUp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (total == 0 || currentPage == 0)
            {
                return;
            }
            currentPage--;
            SetPageText(dt);
            BindDgv(GetTableByCurrentPage(currentPage, dt));
        }
        private void lkDown_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (total == 0 || (currentPage + 1) == pages)
            {
                return;
            }
            currentPage++;
            SetPageText(dt);
            BindDgv(GetTableByCurrentPage(currentPage, dt));
        }
        private void btnSelectAll_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dgvD.Rows)
            {
                foreach (DataGridViewRow yRow in dgvY.Rows)
                {
                    if (row.Cells["Selectc"].EditedFormattedValue.ToString() == "True" && row.Cells["oName"].Value.ToString() == yRow.Cells["yName"].Value.ToString() && row.Cells["ospec"].Value.ToString() == yRow.Cells["yspec"].Value.ToString())
                    {
                        MessageBox.Show("已经选过了!");
                        foreach (DataGridViewRow drow in dgvD.Rows)
                        {
                            if (drow.Cells["Selectc"].EditedFormattedValue.ToString() == "True")
                            {
                                drow.Cells["Selectc"].Value = false;
                            }
                        }
                        return;
                    }
                }
            }
            List list = new List();
            foreach (DataGridViewRow row in dgvD.Rows)
            {
                if (row.Cells["Selectc"].EditedFormattedValue.ToString() == "True")
                {
                    list.Add(Convert.ToInt32(row.Cells["Id"].Value));
                }
            }
            foreach (int id in list)
            {
                DataRow ydr = ydt.NewRow();
                foreach (DataRow dr in dt.Rows)
                {
                    if (Convert.ToInt32(dr["Id"]) == id)
                    {
                        ydr["Id"] = Convert.ToInt32(dr["Id"]);
                        ydr["Name"] = dr["Name"].ToString();
                        if (dr["Stand"] != null && dr["Stand"].ToString() != "") ydr["Stand"] = dr["Stand"].ToString();
                        if (dr["UseDose1"] != null && dr["UseDose1"].ToString() != "") ydr["DOSEPER"] = SetDOSEPER(dr["UseDose1"].ToString());
                        if (dr["UseDose2"] != null && dr["UseDose2"].ToString() != "") ydr["DOSEPER2"] = SetDOSEPER(dr["UseDose2"].ToString());
                        if (dr["UseDose3"] != null && dr["UseDose3"].ToString() != "") ydr["DOSEPER3"] = SetDOSEPER(dr["UseDose3"].ToString());
                        ydt.Rows.Add(ydr);
                        break;
                    }
                }
            }
            BindDgvY(ydt);
        }
        private decimal SetDOSEPER(string str)
        {
            decimal result = 0;
            try
            {
                if (str.ToString() != null)
                {
                    result = decimal.Parse(double.Parse(str).ToString());//.Length - 3);
                }
            }
            catch (Exception)
            {
            }
            return result;
        }
        private void btnCancelAll_Click(object sender, EventArgs e)
        {
            List list = new List();
            foreach (DataGridViewRow row in dgvY.Rows)
            {
                if (row.Cells["ySelect"].EditedFormattedValue.ToString() == "True")
                {
                    list.Add(Convert.ToInt32(row.Cells["yId"].Value));
                }
            }
            foreach (int id in list)
            {
                foreach (DataGridViewRow row in dgvY.Rows)
                {
                    if (Convert.ToInt32(row.Cells["yId"].Value) == id)
                    {
                        dgvY.Rows.Remove(row);
                        break;
                    }
                }
            }
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            List list = new List();
            foreach (DataGridViewRow row in dgvY.Rows)
            {
                list.Add(Convert.ToInt32(row.Cells["yId"].Value)); ;
            }
            string applianceId = string.Join(",", list.ToArray());
            AnaesthesiaEvents.TheEventsId = applianceId;
            int num = BAnaesthesiaEvents.Update(AnaesthesiaEvents);
            if (num > 0)
            {
                this.Close();
            }
        }
        private void dgvD_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            DataRow ydr = ydt.NewRow();
            int id = Convert.ToInt32(dgvD.SelectedRows[0].Cells["Id"].Value);
            foreach (DataRow row in ydt.Rows)
            {
                if (Convert.ToInt32(row["Id"]) == id)
                {
                    MessageBox.Show("已选择!");
                    return;
                }
            }
            foreach (DataRow row in dt.Rows)
            {
                if (Convert.ToInt32(row["Id"]) == id)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        ydr["Id"] = row["Id"];
                        ydr["Name"] = row["Name"];
                        ydr["Stand"] = row["Stand"];
                        ydr["UseDose1"] = row["UseDose1"];
                        ydr["UseDose2"] = row["UseDose2"];
                        ydr["UseDose3"] = row["UseDose3"];
                    }
                    ydt.Rows.Add(ydr);
                    break;
                }
            }
            BindDgvY(ydt);
        }
        public DataGridViewTextBoxEditingControl dgvTxt = null; // 声明 一个文本 CellEdit
        public DataGridViewTextBoxEditingControl dgvTxtName = null; // 声明 一个文本 CellEdit
        private void dgvY_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            //判断类型
            if (dgvY.CurrentCell != null)
            {
                dgvTxtName = (DataGridViewTextBoxEditingControl)e.Control; // 得到单元格 
                int id = Convert.ToInt32(dgvY.CurrentRow.Cells["yId"].Value);
                if (dgvY.CurrentCell.ColumnIndex == 4 || dgvY.CurrentCell.ColumnIndex == 5 || dgvY.CurrentCell.ColumnIndex == 6)
                {
                    dgvTxtName = (DataGridViewTextBoxEditingControl)e.Control; // 得到单元格
                    dgvTxtName.KeyPress -= new KeyPressEventHandler(dgvTxt_KeyPress); // 绑定事件
                    dgvTxtName.KeyPress += new KeyPressEventHandler(dgvTxt_KeyPress); // 绑定事件
                }
            }
        }
        void dgvTxt_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar < 48 || e.KeyChar > 57)
            {
                if (e.KeyChar != 46 && e.KeyChar != 8 && e.KeyChar != 13)
                {
                    e.Handled = true;
                }
            }
            TextBox tb = sender as TextBox;
            if (e.KeyChar == 46)
            {
                int n = tb.Text.LastIndexOf(".");
                if (n > 0) e.Handled = true;
            }
        }
        /// 
        /// 上移
        /// 
        /// 
        /// 
        private void buttonX1_Click(object sender, EventArgs e)
        {
            try
            {
                DataGridViewSelectedRowCollection dgvsrc = dgvY.SelectedRows;//获取选中行的集合     
                if (dgvsrc.Count > 0)
                {
                    int index = dgvY.SelectedRows[0].Index;//获取当前选中行的索引               
                    if (index > 0)//如果该行不是第一行                 
                    {
                        DataGridViewRow dgvr = dgvY.Rows[index - dgvsrc.Count];//获取选中行的上一行                
                        dgvY.Rows.RemoveAt(index - dgvsrc.Count);//删除原选中行的上一行        
                        dgvY.Rows.Insert((index), dgvr);//将选中行的上一行插入到选中行的后面      
                        for (int i = 0; i < dgvsrc.Count; i++)//选中移动后的行                      
                        {
                            dgvY.Rows[index - i - 1].Selected = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        /// 
        /// 下移
        /// 
        /// 
        /// 
        private void buttonX2_Click(object sender, EventArgs e)
        {
            try
            {
                DataGridViewSelectedRowCollection dgvsrc = dgvY.SelectedRows;//获取选中行的集合       
                if (dgvsrc.Count > 0)
                {
                    int index = dgvY.SelectedRows[0].Index;//获取当前选中行的索引                
                    if (index >= 0 & (dgvY.RowCount - 1) != index)//如果该行不是最后一行          
                    {
                        DataGridViewRow dgvr = dgvY.Rows[index + 1];//获取选中行的下一行       
                        dgvY.Rows.RemoveAt(index + 1);//删除原选中行的上一行      
                        dgvY.Rows.Insert((index + 1 - dgvsrc.Count), dgvr);//将选中行的上一行插入到选中行的后面   
                        for (int i = 0; i < dgvsrc.Count; i++)//选中移动后的行            
                        {
                            dgvY.Rows[index + 1 - i].Selected = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        private void dgvY_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //判断类型
            if (e.ColumnIndex ==4 ||e.ColumnIndex ==5 || e.ColumnIndex ==6  )
            {
                int id = Convert.ToInt32(dgvY.Rows[e.RowIndex].Cells["yId"].Value);
                string value = dgvY.Rows[e.RowIndex].Cells[e.ColumnIndex].Value==null?"":dgvY.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                if (e.ColumnIndex == 4)
                {
                    BDrugs.Update(" UseDose1=@UseDose1 where Id=@Id", new ParameterList("@UseDose1", value, "@Id", id));
                }
                else if (e.ColumnIndex == 5)
                {
                    BDrugs.Update(" UseDose2=@UseDose2 where Id=@Id", new ParameterList("@UseDose2", value, "@Id", id));
                }
                else if (e.ColumnIndex == 6)
                {
                    BDrugs.Update(" UseDose3=@UseDose3 where Id=@Id", new ParameterList("@UseDose3", value, "@Id", id));
                }
            }
        }
    }
}