ReadOnly DataGridViewColumn中的Selectabletext

时间:2017-03-07 10:45:18

标签: c# winforms datagridview

我有DataGridView,其中包含必须为ReadOnly的列。 问题是,这个值是不可选择的......我需要复制&只用鼠标粘贴。

此外,DataGridView.SelectionMode必须为DataGridViewSelectionMode.FullRowSelectDataGridViewSelectionMode.RowHeaderSelect

任何想法如何解决这个问题?

我搜索了一些像Editable或类似的属性,但我只找到了ReadOnly属性。

修改

我只需要ReadOnly单元格中的Cell-Value。

2 个答案:

答案 0 :(得分:1)

在这段代码中,我以编程方式创建了列,并将第1列设置为readonly。使用选择模式CellSelect,您可以最简单地复制只读数据。如果您使用FullRowSelect,则始终复制整行(除非您进入编辑模式并复制可编辑的单元格)。

dataGridView.Columns.Add( "column1Column", "T1" );
dataGridView.Columns[0].ReadOnly = true;
//The first column (T1) is now ReadOnly
dataGridView.Columns.Add("column2Column", "T2");
dataGridView.Columns.Add("column3Column", "T3");
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
//Or use this if you want to copy cell content of readonly cells
dataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect;

只使用鼠标从ReadOnly单元格获取数据的简单方法(以我的经验用户友好)是创建CellMouseClick事件处理程序。

示例

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if ( e.Button == MouseButtons.Right )
        {
            //Set text to clipboard
            Clipboard.SetText( dataGridView[e.ColumnIndex, e.RowIndex].Value.ToString() );
        }
    }

答案 1 :(得分:0)

使用DataGridViewSelectionMode.FullRowSelect获取点击的单元格:

DataGridViewCell clickedCell;

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    try
    {
        if (e.Button == MouseButtons.Right)
        {
            dataGridView1.ClearSelection();
            clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
            clickedCell.Selected = true;

            var cellRectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
            // Show context menu with 'Copy' option
            contextMenuStrip1.Show(dataGridView1, cellRectangle.Left + e.X, cellRectangle.Top + e.Y);
        }

    }
    catch (Exception ex)
    {
        throw ex; 
    }
}

然后在表单和contextMenuStrip项目点击事件中添加copy(上下文菜单将显示在上面的事件中):

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{            
    Clipboard.SetText(clickedCell.Value.ToString());
}