winform datagridview一列中如何实现既有按钮又有文本输入像这种效果的,按钮实现点击。弹出查询表

解决方案 »

  1.   

    自带的VS中Datagridview好像是不可以实现的吧,那个是重绘了该控件吧,例如国外有个叫Table的控件
      

  2.   

    微软件只到的DataGridView列的类型模板当中是没有这种类型的列模板的,这个要靠自己实现一个DataGridViewColumn的类,添加单元格右边按键部分的功能
    class MyDataGridViewColumn : DataGridViewColumn
    {
    //楼主需要完成下面两个方面功能://重绘时画出按钮的区域及三个点//点击的时候加入对方框弹出
    }
    使用的时候private void InitialGrid()
    {
    DataGridView dgv = new DataGridView();
    DataGridViewColumn col = new MyDataGridView();
    dgv.Columns.Add(col);}只是提供一个思路,楼主如有兴趣可以自己去完善..
      

  3.   

    GridView列不是可以有模板的吗?自己写个用户控件,把用户控件加进去不行吗?
      

  4.   

       #region 显示按钮
            string ShowButtonColumnName = "";
            private void dgvMaterielDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (dgvMaterielDetail.CurrentCell != null)  //&& dgvMaterielDetail.CurrentCell.ColumnIndex == 8
                {
                    //增加文本框后面显示小按钮 
                    Control[] CS = this.dgvMaterielDetail.EditingPanel.Controls.Find("_TextBoxCellButton_", true);
                    if (CS.Length > 0)
                    {
                        this.dgvMaterielDetail.EditingPanel.Controls.Remove(CS[0]);
                    }
                    if (ShowButtonColumnName != "")
                    {
                        string[] ShowButton = ShowButtonColumnName.ToString().Split(',');
                        for (int i = 0; i < ShowButton.Length; i++)
                        {
                            if (ShowButton[i].ToLower() == this.dgvMaterielDetail.CurrentCell.OwningColumn.Name.ToLower())
                            {
                                MES.FormBase.UButton button = new MES.FormBase.UButton();
                                button.Name = "_TextBoxCellButton_";
                                button.Text = "";
                                button.Width = 16;
                                button.Height = 40;
                                button.BackColor = System.Drawing.Color.Black;
                                button.Parent = this.dgvMaterielDetail.EditingPanel;
                                button.Dock = DockStyle.Right;
                                e.Control.Dock = DockStyle.Fill;
                                button.Click += new EventHandler(TextBoxCellButtonClick_Click);
                            }
                        }
                    }            }
            }
            #endregion
      

  5.   

      #region 选择主副物料
            public virtual void TextBoxCellButtonClick_Click(object sender, EventArgs e)
            {
                if (dgvMaterielDetail.Rows.Count == 0)
                    return;
                if (dgvMaterielDetail.CurrentRow == null)
                    return;            SelectItem fs;
                //主料            if (dgvMaterielDetail.CurrentCell.ColumnIndex == dgvMaterielDetail.Columns["MAINMATERIELNO"].Index)
                {
                    fs = new SelectItem();
                    fs.strChkFlag = "1";
                    fs.TabItem.Rows.Clear();
                    if (fs.ShowDialog(this) == DialogResult.OK)
                    {
                        if (fs.TabItem.Rows.Count == 0)
                            return;
                        dgvMaterielDetail.Rows[dgvMaterielDetail.CurrentRow.Index].Cells["MAINMATERIELNO"].Value = fs.TabItem.Rows[0][0].ToString();
                        dgvMaterielDetail.Rows[dgvMaterielDetail.CurrentRow.Index].Cells["MATERIELSPECIAL"].Value = fs.TabItem.Rows[0][2].ToString();
                    }            }            //副料1
                if (dgvMaterielDetail.CurrentCell.ColumnIndex == dgvMaterielDetail.Columns["SECONDMATERIELNO1"].Index)
                {
                    fs = new SelectItem();
                    fs.strChkFlag = "1";
                    fs.TabItem.Rows.Clear();
                    if (fs.ShowDialog(this) == DialogResult.OK)
                    {
                        if (fs.TabItem.Rows.Count == 0)
                            return;
                        dgvMaterielDetail.Rows[dgvMaterielDetail.CurrentRow.Index].Cells["SECONDMATERIELNO1"].Value = fs.TabItem.Rows[0][0].ToString();                }            }
                //副料2
                if (dgvMaterielDetail.CurrentCell.ColumnIndex == dgvMaterielDetail.Columns["SECONDMATERIELNO2"].Index)
                {
                    fs = new SelectItem();
                    fs.strChkFlag = "1";
                    fs.TabItem.Rows.Clear();
                    if (fs.ShowDialog(this) == DialogResult.OK)
                    {
                        if (fs.TabItem.Rows.Count == 0)
                            return;
                        dgvMaterielDetail.Rows[dgvMaterielDetail.CurrentRow.Index].Cells["SECONDMATERIELNO2"].Value = fs.TabItem.Rows[0][0].ToString();
                    }            }
                //副料3
                if (dgvMaterielDetail.CurrentCell.ColumnIndex == dgvMaterielDetail.Columns["SECONDMATERIELNO3"].Index)
                {
                    fs = new SelectItem();
                    fs.strChkFlag = "1";
                    fs.TabItem.Rows.Clear();
                    if (fs.ShowDialog(this) == DialogResult.OK)
                    {
                        if (fs.TabItem.Rows.Count == 0)
                            return;
                        dgvMaterielDetail.Rows[dgvMaterielDetail.CurrentRow.Index].Cells["SECONDMATERIELNO3"].Value = fs.TabItem.Rows[0][0].ToString();
                    }            }
                dgvMaterielDetail.CurrentRow.Cells[dgvMaterielDetail.CurrentCell.ColumnIndex - 1].Selected = true;
                dgvMaterielDetail.CurrentRow.Cells[dgvMaterielDetail.CurrentCell.ColumnIndex + 1].Selected = true;
            }
            #endregion