我有DataGridView
,其中包含必须为ReadOnly
的列。
问题是,这个值是不可选择的......我需要复制&只用鼠标粘贴。
此外,DataGridView.SelectionMode
必须为DataGridViewSelectionMode.FullRowSelect
或DataGridViewSelectionMode.RowHeaderSelect
任何想法如何解决这个问题?
我搜索了一些像Editable或类似的属性,但我只找到了ReadOnly
属性。
修改
我只需要ReadOnly单元格中的Cell-Value。
答案 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());
}