在我的 VS2015Winform
应用程序中,有一个DataGridView
控件绑定到一个BindingSource
绑定到 SQL 数据库的控件。网格有四列:ID、URL、名称、类型。URL 列DataGridViewLinkColumn
的ReadOnly
属性默认设置为False
。我可以编辑名称和类型列,但 URL 列显示为只读。为什么?如何使 URL 列可编辑?
问问题
304 次
1 回答
0
正如雷扎所说:
DataGridViewLinkColumn
不可编辑。
因此,要编辑此类列中的单元格,您必须DataGridViewTextBoxCell
根据需要将其转换为 a。例如,如果我已订阅DataGridView.CellContentClick
处理点击链接,那么我将处理CellDoubleClick
单元格转换:
private void DataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (this.dataGridView1.Columns[e.ColumnIndex] == this.dataGridView1.Columns["URL"])
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] = new DataGridViewTextBoxCell();
this.dataGridView1.BeginEdit(true);
}
}
一旦你输入了你的值并离开了单元格,你应该CellValidated
在将单元格转换回之前使用来验证新值是一个 URI DataGridViewLinkCell
:
private void DataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
{
if (this.dataGridView1.Columns[e.ColumnIndex] == this.dataGridView1.Columns["URL"])
{
DataGridViewCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (Uri.IsWellFormedUriString(cell.EditedFormattedValue.ToString(), UriKind.Absolute))
{
cell = new DataGridViewLinkCell();
}
}
}
警告:
这仅在“URL”列的数据是字符串时才对我有用,因此在绑定后,该列默认为
DataGridViewTextBoxColumn
- 强制手动转换为链接单元格以开始:private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { foreach (DataGridViewRow r in dataGridView1.Rows) { if (Uri.IsWellFormedUriString(r.Cells["URL"].Value.ToString(), UriKind.Absolute)) { r.Cells["URL"] = new DataGridViewLinkCell(); } } }
从一开始就将“URI”列设置为
DataGridViewLinkColumn
允许单元格转换TextBox
成功。但是当转换回链接单元格时,调试显示转换发生,但单元格格式和行为失败。
于 2016-03-18T18:39:17.980 回答