DataGridView - "单元格选择样式" - 编辑单元格

12

我正在开发一个使用DataGridView控件的WinForm客户端应用程序。我注意到用户需要先单击一次才能选择单元格,然后再单击一次才能编辑它。有什么办法可以将其改为单击一次即可进入编辑模式呢?我记得以前好像看到过类似的功能,但是想不起来那个名字了。

3个回答

24

在 DataGridView 的属性中:EditMode -> EditOnEnter


7
我注意到了关于EditMode.EditOnEnter的问题。 它会偏离很多DataGriView的默认行为,这让人感到不爽。 其中一个问题是,即使明确调用EndEdit方法,编辑的单元格仍然处于编辑模式(你必须点击其他控件才能让datagridview单元格失去焦点)。
下面这段代码非常好用,它可以让你通过单击任何单元格进行编辑,并通过按Enter或单击DGView外部来结束编辑(就像你在默认行为中所做的那样)。
上代码:
    private void myDatagridView_MouseUp(object sender, MouseEventArgs e)
    { 
        if (e.Button == MouseButtons.Left)
        {
            hitTestInfo = myDatagridView.HitTest(e.X, e.Y);
            if (hitTestInfo.Type == DataGridViewHitTestType.Cell) 
                myDatagridView.BeginEdit(true);
            else 
                myDatagridView.EndEdit();
        }
    } 

1
我喜欢使用“单击并按住”来编辑单元格:dataGridView_List是我的DataGridView的名称
DataGridView EditMode属性设置为EditProgrammatically
创建一个类来跟踪单元格和计时器(保持时间为500毫秒),然后使用CellMouseDown / Up事件启动/停止计时器。
   public class cellEdit
    {
        int Row;
        int Col;
        readonly int elapsedtime;
        readonly Stopwatch SW;
        public cellEdit(int iElapsedTimeInMillisecons)
        {
            elapsedtime = iElapsedTimeInMillisecons;
            SW = Stopwatch.StartNew();
        }
        public void Start(int iRow, int iCol)
        {
            {
                Row = iRow;
                Col = iCol;
                SW.Restart();
            }
        }
        public bool Stop(int iRow, int iCol)
        {
            SW.Stop();
            if (iRow == Row && iCol == Col) if (SW.ElapsedMilliseconds > elapsedtime) return true;
            return false;
        }
    }

在表单中
    public cellEdit GetCellEdit = new GetCellEdit(500);  // 500mS

添加 datagridview CellMouseUp 和 CellMouseDown 事件

    private void dataGridView_List_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex > 0 && e.RowIndex < dataGridView_List.Rows.Count && e.ColumnIndex > 0 && e.ColumnIndex < dataGridView_List.Columns.Count)
            GetCellEdit.Start(e.RowIndex, e.ColumnIndex);
    }
    private void dataGridView_List_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex > 0 && e.RowIndex < dataGridView_List.Rows.Count && e.ColumnIndex > 0 && e.ColumnIndex < dataGridView_List.Columns.Count)
            if (GetCellEdit.Stop(e.RowIndex, e.ColumnIndex))
            {
                dataGridView_List.CurrentCell = dataGridView_List.Rows[e.RowIndex].Cells[e.ColumnIndex];
                dataGridView_List.BeginEdit(false);
            }
    }

现在,如果您点击并按住鼠标半秒钟,单元格将进入编辑模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接