Добавить Получить Установить DatagridViewTextBoxCell - PullRequest
2 голосов
/ 25 января 2020

Я пытаюсь добавить свойство get; set; в свой DataGridViewTextBoxCell, но оно не работает

Для этого я создаю свой класс publi c:

public class MyData : DataGridViewTextBoxCell
    {
        public string Url { get; set; }
    }

И в своем основном коде

dataGridView1.Rows.Add();
MyData CustomCell = (MyData)dataGridView1.Rows[0].Cells[0];
CustomCell.Url = "";

Во время выполнения кода у меня появляется ошибка в строке MyData CustomCell = (MyData)dataGridView1.Rows[0].Cells[0];

System.InvalidCastException: 'Невозможно привести объект типа System. Windows .Forms.DataGridViewTextBoxCell 'into type .MyData'. '

У вас есть подсказка для добавления моего пользовательского свойства в ячейку datagridview?

Большое спасибо

1 Ответ

2 голосов
/ 25 января 2020

Вам также необходимо создать класс Column и установить для свойства CellTemplate новый экземпляр класса Cell:

public class MyDataGridViewTextBoxColumn : DataGridViewTextBoxColumn
{
    public MyDataGridViewTextBoxColumn() =>
        CellTemplate = new MyDataGridViewTextBoxCell();
}

И ваш класс Cell должен выглядеть следующим образом:

public class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
    public MyDataGridViewTextBoxCell() { }

    public string Url { get; set; }

    //Don't forget to clone your new properties.
    public override object Clone()
    {
        var c = base.Clone();
        ((MyDataGridViewTextBoxCell)c).Url = Url;
        return c;
    }
}

Теперь вы можете добавить новый тип Column от дизайнера:

Custom DGV Column

Или через код:

var myNewTBC = new MyDataGridViewTextBoxColumn
{
    HeaderText = "My Custom TB",
};
dataGridView1.Columns.Add(myNewTBC);

Если предположить, что столбец пользовательского текстового поля является первым столбцом в DGV, то вы можете получить Cell следующим образом:

var myTB = (MyDataGridViewTextBoxCell)dataGridView1.Rows[0].Cells[0];
myTB.Url = "...";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...