Winforms Winform DataGridViewLinkColumn只读属性不工作
在我的VS2015Winforms Winform DataGridViewLinkColumn只读属性不工作,winforms,datagridview,bindingsource,datagridviewlinkcolumn,Winforms,Datagridview,Bindingsource,Datagridviewlinkcolumn,在我的VS2015Winform应用程序中,有一个DataGridView控件绑定到绑定到SQL数据库的BindingSource。网格有四列:ID、URL、Name和Type。URL列为DataGridViewLinkColumn,默认情况下,其只读属性设置为False。我可以编辑名称和类型列,但URL列显示为只读。为什么?如何使URL列可编辑?如Reza所述: DataGridViewLinkColumn不可编辑 因此,要编辑此类列中的单元格,必须根据需要将其转换为DataGridViewT
Winform
应用程序中,有一个DataGridView
控件绑定到绑定到SQL数据库的BindingSource
。网格有四列:ID、URL、Name和Type。URL列为DataGridViewLinkColumn
,默认情况下,其只读属性设置为False
。我可以编辑名称和类型列,但URL列显示为只读。为什么?如何使URL列可编辑?如Reza所述:
DataGridViewLinkColumn
不可编辑
因此,要编辑此类列中的单元格,必须根据需要将其转换为DataGridViewTextBoxCell
。例如,如果我订阅了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
类型。但当转换回链接单元格时,调试显示转换已发生,但单元格格式和行为失败
DataGridViewLinkColumn
不可编辑。它只是以链接的形式显示内容。数据实际上是在数据库(读写)中更改的,还是仅在表单上更改的(可能仍然是只读的,只是在“戏弄”你)?