⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fselect.cs

📁 基于C/S的医疗卫生管理系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
        #endregion

        #region ShowDialog
        public new DialogResult ShowDialog(IWin32Window owner)
        {
            DialogResult dResult = DialogResult.Cancel;
            try
            {
                GetData();
                //实际数据行数
                m_DataRowCount = m_DsData.RowCount;
                if (m_DsData.RowCount == 0)
                {
                    dResult = DialogResult.Cancel;
                }
                else if (m_DsData.RowCount == 1)
                {
                    SelectData(1);
                    dResult = DialogResult.OK;
                }
                else
                {
                    int padRowCount = 9 - m_DsData.RowCount % m_PageRowCount;
                    m_PageCount = m_DsData.RowCount / m_PageRowCount + ((m_DsData.RowCount % m_PageRowCount) > 0 ? 1 : 0);
                    m_CurrentPage = 1;

                    //补足9行
                    for (int i = 1; i < padRowCount + 1; i++)
                    {
                        m_DsData.InsertRow(0);
                    }

                    if (owner == null)
                        dResult = base.ShowDialog();
                    else
                        dResult = base.ShowDialog(owner);
                }
            }
            finally
            {
                if (m_ShowColumn != null)
                {
                    m_ShowColumn.Clear();
                    m_ShowColumn.Dispose();
                }

                if (m_ReturnCol != null)
                    m_ReturnCol.Clear();

                if (m_DsData != null)
                {
                    m_DsData.ShareDataOff();
                    m_DsData.Dispose();
                }
            }
            return dResult;
        }

        public new DialogResult ShowDialog()
        {
            return this.ShowDialog(null);
        }
        #endregion

        private void FSelect_Load(object sender, EventArgs e)
        {
            try
            {
                this.CreateDW();
                this.SetPageLabel();
            }
            catch (Exception ex)
            {
                MessageBox.Show("创建数据窗口发生异常:" + ex.Message, MsgTitle.Error);
                this.DialogResult = DialogResult.Cancel;
            }
        }

        #region ShowPage
        private void SetPageLabel()
        {            
            if (m_PageCount < m_MaxPage)
            {
                label1.Text = "第" + m_CurrentPage.ToString() + "页/共" + m_PageCount.ToString()+"页";
            }
            else
            {
                label1.Text = "第" + m_CurrentPage.ToString() + "页/共" + m_PageCount.ToString() + "页  最多显示页数:" + m_MaxPage.ToString();
            }
        }

        private enum ShowPageEnum
        {
            Up,
            Down
        }
        private void ShowPage(ShowPageEnum showPageEnum)
        {
            if (showPageEnum == ShowPageEnum.Up)
            {
                if (m_CurrentPage > 1)
                {
                    int row = (m_CurrentPage-2)*m_PageRowCount+1;
                    dwSelect.ScrollToRow(row);
                    dwSelect.SetRow(row);
                    m_CurrentPage--;
                    this.SetPageLabel();
                }
            }
            else
            {
                if (m_CurrentPage <m_PageCount)
                {
                    int row = m_CurrentPage * m_PageRowCount + 9;  
                    dwSelect.ScrollToRow(row);
                    //大于实际数据行
                    if (row > m_DataRowCount)
                        row = m_DataRowCount;
                    dwSelect.SetRow(row);
                    m_CurrentPage++;
                    this.SetPageLabel();
                }
            }
        }

        private void ScrollToRow(int opertion)
        {
            //opertion == 1  
            //opertion == -1 

            int targetRow = 0;
            if (opertion == 1) //向上一行
                targetRow = dwSelect.CurrentRow - 1;
            else //向下一行
                targetRow = dwSelect.CurrentRow + 1;

            if (targetRow < 1 || targetRow > m_DataRowCount)
                return;

            int startRow = (m_CurrentPage - 1) * m_PageRowCount + 1;
            int endRow = m_CurrentPage * m_PageRowCount;

            if (targetRow >= startRow && targetRow <= endRow)
            {
                dwSelect.SetRow(targetRow);
                dwSelect.ScrollToRow(targetRow);
            }
        }
        #endregion

        #region Activated
        private void FSelect_Activated(object sender, EventArgs e)
        {
            this.dwSelect.Focus();
        }
        #endregion

        #region Key
        private bool isKeyDownInHere = false;
        private void dwSelect_KeyDown(object sender, KeyEventArgs e)
        {
            e.Handled = true;
            isKeyDownInHere = true;
        }
        private void dwSelect_KeyUp(object sender, KeyEventArgs e)
        {
            if (!isKeyDownInHere)
                return;

            switch (e.KeyCode)
            {
                case Keys.PageDown:
                    ShowPage(ShowPageEnum.Down);
                    break;
                case Keys.PageUp:
                    ShowPage(ShowPageEnum.Up);
                    break;
                case Keys.Enter:
                    if (dwSelect.CurrentRow > 0)
                    {
                        this.SelectData(dwSelect.CurrentRow);
                    }
                    break;
                case Keys.Escape:
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                    break;
                case Keys.Right:
                case Keys.Down:
                    ScrollToRow(-1);
                    break;
                case Keys.Left:
                case Keys.Up:
                    ScrollToRow(1);
                    break;
                case Keys.NumPad1:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 1);
                    break;
                case Keys.NumPad2:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 2);
                    break;
                case Keys.NumPad3:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 3);
                    break;
                case Keys.NumPad4:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 4);
                    break;
                case Keys.NumPad5:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 5);
                    break;
                case Keys.NumPad6:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 6);
                    break;
                case Keys.NumPad7:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 7);
                    break;
                case Keys.NumPad8:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 8);
                    break;
                case Keys.NumPad9:
                    this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 9);
                    break;
            }
        }
        #endregion

        #region 选中数据
        private void SelectData(int row)
        {
            if (row == 0 || row > m_DataRowCount)
                return;

            ArrayList retValue = new ArrayList(m_ReturnCol.Count);
            for(int i=0;i<m_ReturnCol.Count;i++)
            {
                if (m_DsData.IsItemNull(row,m_ReturnCol[i].ToString()))
                    retValue.Add("");
                else
                    retValue.Add(m_DsData.GetItemString(row, m_ReturnCol[i].ToString()));
            }
            m_ReturnValue = (string[])retValue.ToArray(typeof(string));
            retValue.Clear();
            this.DialogResult = DialogResult.OK;
        }
        #endregion

        private void dwSelect_Click(object sender, EventArgs e)
        {
            if (dwSelect.ObjectUnderMouse.RowNumber > m_DataRowCount)
                return;
            
            SelectData(dwSelect.ObjectUnderMouse.RowNumber);
        }

        private void FSelect_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show(e.KeyValue.ToString());
        }       
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -