0

在我的 VS2015Winform应用程序中,有一个DataGridView控件绑定到一个BindingSource绑定到 SQL 数据库的控件。网格有四列:ID、URL、名称、类型。URL 列DataGridViewLinkColumnReadOnly属性默认设置为False。我可以编辑名称和类型列,但 URL 列显示为只读。为什么?如何使 URL 列可编辑?

4

1 回答 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 回答