Example #1
0
        void _gridCellClick(UcDataGridView gridView)
        {
            if (!gridView.Visible)
            {
                return;
            }
            #region 获取单元格格和所需物件
            Control            con    = gridView.Tag as Control;
            List <DropGridCol> lstCol = new List <DropGridCol>();
            if (gridView.CurrentCell == null)
            {
                return;
            }
            int             rowIdx = gridView.CurrentCell.RowIndex;
            DataGridViewRow row    = gridView.Rows[rowIdx];
            lstCol = gridView.Columns[0].Tag as List <DropGridCol>;
            #endregion
            #region 表格赋值
            foreach (DropGridCol info in lstCol)
            {
                if (info.ToControl != null)
                {
                    #region 文本框
                    if (info.ToControl.GetType() == typeof(UcTextBox))
                    {
                        (info.ToControl as UcTextBox).Text = row.Cells["col_" + gridView.Name + "_" + info.ColName].Value.ToStringHasNull();
                    }
                    #endregion
                    #region 表格单元格
                    else if (info.ToControl.GetType() == typeof(DataGridViewTextBoxCell))
                    {
                        DataGridViewTextBoxCell cell = (info.ToControl as DataGridViewTextBoxCell);
                        cell.Value = row.Cells["col_" + gridView.Name + "_" + info.ColName].Value.ToStringHasNull();
                    }
                    #endregion
                    #region 单元格编辑文本
                    else if (info.ToControl.GetType() == typeof(DataGridViewTextBoxEditingControl))
                    {
                        rowIdx = (info.ToControl as DataGridViewTextBoxEditingControl).EditingControlRowIndex;

                        DataGridViewCell cell = (info.ToControl as DataGridViewTextBoxEditingControl).EditingControlDataGridView.CurrentCell;
                        cell.Value = row.Cells["col_" + gridView.Name + "_" + info.ColName].Value.ToStringHasNull();
                        (info.ToControl as DataGridViewTextBoxEditingControl).Text = row.Cells["col_" + gridView.Name + "_" + info.ColName].Value.ToStringHasNull();
                    }
                    #endregion
                }
            }
            #endregion
            #region 隐藏表格
            this.Visible = false;
            con.Focus();
            #endregion
        }
Example #2
0
 void CreateDropGridEx <T, R, P>(int width, int height
                                 , List <DropGridCol> colList, P param
                                 , Func <P, T> action)
 {
     #region 获取下拉文本控件
     if (!colList.Exists(a => a.IsDropSource == true))
     {
         MessageBox.Show("您没指定表格列集合的下拉文本标识!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return;
     }
     object lnkCon;
     lnkCon = colList.Find(a => a.IsDropSource == true).ToControl;
     if (lnkCon == null)
     {
         MessageBox.Show("您没指定表格列集合的下拉文本控件!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return;
     }
     #endregion
     #region 创建表格控件
     UcDataGridView gridView = this.ucDataGridView;
     if (gridView == null)
     {
         gridView        = new UcDataGridView();
         gridView.Name   = "__dropGrid";
         gridView.Anchor = AnchorStyles.None;
         this.Controls.Add(gridView);
     }
     __dropGridView = gridView;
     #endregion
     #region 执行表格数据源委托
     T        t       = action(param);
     List <R> rstList = new List <R>();
     if (t.GetType() == typeof(ZNLFrame.Entity.PageList <R>))
     {
         rstList = (List <R>)t.GetType().GetProperty("ResultList").GetValue(t, null);
     }
     else
     {
         rstList = t as List <R>;
     }
     #endregion
     #region 绑定表格
     gridView.ReadOnly   = true;
     gridView.DataSource = null;
     gridView.Columns.Clear();
     gridView.Rows.Clear();
     foreach (DropGridCol info in colList)
     {
         gridView.Columns.Add(new DataGridViewTextBoxColumn()
         {
             Name             = "col_" + gridView.Name + "_" + info.ColName,
             HeaderText       = info.HeadText,
             Visible          = info.IsShow,
             DataPropertyName = info.ColName,
             Width            = info.Width
         });
     }
     gridView.DataSource = rstList;
     this.Width          = width;
     this.Height         = height;
     #endregion
     #region 定位表格
     if (lnkCon.GetType() == typeof(UcTextBox))
     {
         InitTextDropGrid <T, R, P>(gridView, lnkCon as UcTextBox, colList, param, action);
     }
     if (lnkCon.GetType() == typeof(DataGridViewTextBoxEditingControl))
     {
         InitGridCellDropGrid <T, R, P>(gridView, lnkCon as DataGridViewTextBoxEditingControl, colList, param, action);
     }
     #endregion
     if (!this.Visible)
     {
         this.Visible = true;
     }
 }
Example #3
0
        void InitTextDropGrid <T, R, P>(UcDataGridView gridView, Control lnkCon
                                        , List <DropGridCol> colList, P param, Func <P, T> action)
        {
            #region 定位表格
            int     x = 0, y = 0;
            Control curCon = lnkCon;
            while (!curCon.GetType().Name.ToStringHasNull().StartsWith("frm"))
            {
                x     += curCon.Left;
                y     += curCon.Top;
                curCon = curCon.Parent;
            }
            y += lnkCon.Height;

            if (x + gridView.Width > this.FindForm().ClientSize.Width)
            {
                x = (x - gridView.Width) + lnkCon.Width < 0 ? 0 : (x - gridView.Width) + lnkCon.Width;
            }

            if (y + gridView.Height > this.FindForm().ClientSize.Height)
            {
                y = y - lnkCon.Height - gridView.Height < 0 ? 0 : y - lnkCon.Height - gridView.Height;
            }
            this.Left = x;
            this.Top  = y;
            this.BringToFront();
            #endregion
            #region 设置控件的KeyUp事件
            if (!__lstAddDropGridControl.Exists(a => a == lnkCon.Name))
            {
                __lstAddDropGridControl.Add(lnkCon.Name);
                lnkCon.KeyDown += delegate(object sender, KeyEventArgs e)
                {
                    if (e.KeyCode == Keys.Escape)
                    {
                        this.__timerDropList.Stop();
                        this.Visible = false;
                    }
                    else if (e.KeyCode == Keys.Enter)
                    {
                        _gridCellClick(gridView);
                    }
                    else if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
                    {
                        gridView.Focus();
                    }
                };
            }
            #endregion
            #region 表格赋加事件
            if (gridView.Tag != lnkCon)
            {
                gridView.PreviewKeyDown -= _gridView_PreviewKeyDown;
                gridView.PreviewKeyDown += new PreviewKeyDownEventHandler(_gridView_PreviewKeyDown);
                gridView.CellClick      -= _gridView_CellClick;
                gridView.CellClick      += new DataGridViewCellEventHandler(_gridView_CellClick);
            }
            gridView.Tag = lnkCon;
            if (gridView.Rows.Count > 0)
            {
                gridView.Columns[0].Tag = colList;
            }
            #endregion
            if (!this.Visible)
            {
                this.Visible = true;
            }
        }
Example #4
0
        void InitGridCellDropGrid <T, R, P>(UcDataGridView gridView, DataGridViewTextBoxEditingControl lnkCon
                                            , List <DropGridCol> colList, P param
                                            , Func <P, T> action)
        {
            #region 定位表格
            int     x = 0, y = 0;
            Control curCon = lnkCon;// lnkCon.DataGridView;
            while (!curCon.GetType().Name.ToStringHasNull().StartsWith("frm"))
            {
                x     += curCon.Left;
                y     += curCon.Top;
                curCon = curCon.Parent;
            }
            y += lnkCon.Height;

            //int rowIdx = lnkCon.;
            //int colIdx = lnkCon.EditingControlDataGridView;
            //x += lnkCon.EditingControlDataGridView.GetCellDisplayRectangle(colIdx, rowIdx, false).X;
            //y += lnkCon.EditingControlDataGridView.GetCellDisplayRectangle(colIdx, rowIdx, false).Y + lnkCon.EditingControlDataGridView.Rows[rowIdx].Height;

            //if (x + gridView.ClientSize.Width > gridView.ClientSize.Width)
            //{
            //    x = (x - gridView.ClientSize.Width) + lnkCon.Width < 0 ? 0 : (x - gridView.ClientSize.Width) + lnkCon.Width;
            //}

            //if (y + gridView.Height > gridView.ClientSize.Height)
            //{
            //    y = y - lnkCon.Height - -gridView.ClientSize.Height < 0 ? 0 : y - lnkCon.Height - gridView.ClientSize.Height;
            //}
            this.Left = x;
            this.Top  = y;
            this.BringToFront();
            #endregion
            #region 设置控件的PreviewKeyDown等事件
            lnkCon.PreviewKeyDown -= _lnkCon_PreviewKeyDown;
            lnkCon.PreviewKeyDown += new PreviewKeyDownEventHandler(_lnkCon_PreviewKeyDown);

            lnkCon.EditingControlDataGridView.CellEnter -= _editingControlDataGridView_CellEnter;
            lnkCon.EditingControlDataGridView.CellEnter += new DataGridViewCellEventHandler(_editingControlDataGridView_CellEnter);
            lnkCon.EditingControlDataGridView.Scroll    -= _gridView_Scroll;
            lnkCon.EditingControlDataGridView.Scroll    += new ScrollEventHandler(_gridView_Scroll);
            lnkCon.EditingControlDataGridView.Resize    -= _gridView_Resize;
            lnkCon.EditingControlDataGridView.Resize    += new EventHandler(_gridView_Resize);
            #endregion
            #region 表格赋加事件
            if (gridView.Tag != lnkCon)
            {
                gridView.PreviewKeyDown -= _gridView_PreviewKeyDown;
                gridView.PreviewKeyDown += new PreviewKeyDownEventHandler(_gridView_PreviewKeyDown);
                gridView.CellClick      -= _gridView_CellClick;
                gridView.CellClick      += new DataGridViewCellEventHandler(_gridView_CellClick);
            }
            #endregion
            gridView.Tag = lnkCon;
            if (gridView.Rows.Count > 0)
            {
                gridView.Columns[0].Tag = colList;
            }
            if (!gridView.Visible)
            {
                this.Visible = true;
            }
        }