2014-01-04 2 views
1

Я хочу создать свой DataGridViewCell, я создал один из подкласса от DataGridViewTextBoxCell, называемый MyDGVCell. Но я хочу передать некоторые параметры MyDGVCell.Как DataGridViewColumn.CellTemplate принимает параметр?

Если нет параметров, все просто:

myDGV.CellTemplate = new MyDGVCell(); 

Но я хочу передать параметр, поэтому конструктор моего MyDGVCell имеет принять параметр. Мой код:

myDGV.CellTemplate = new MyDGVCell(aValue); 

Теперь все в порядке, но когда я связать свою DataTable с myDGV, он сообщает об ошибке, что: no parameterless constructor is found. Я проверил, что это связано с моим MyDGVCell, который действительно не имеет конструктора без параметров.

Итак, мой вопрос: как передать параметр DataGridViewCell? Если необходим конструктор без параметров, как передать параметр во время выполнения?

Любой совет будет полезен, спасибо большое.

--------- --------- EDIT

Чтобы упростить мой вопрос, я создал новый проект Windows Form, перетащите dataGridView1 моей Form1 и сделать их код в Form_Load события:

private void Form1_Load(object sender, EventArgs e) 
    { 
     dataGridView1.Columns.Add("dodo", "dodo"); 

     dataGridView1.Columns[0].CellTemplate = new MyCell("prop"); //line 1 
     //dataGridView1.Columns[0].CellTemplate = new DataGridViewTextBoxCell(); //line 2 

     dataGridView1.Rows.Add("try make cell"); 
    } 

А вот мой настроен DataGridViewCell

class MyCell : DataGridViewTextBoxCell 
{ 
    public string MyProperty { get; set; } 

    public MyCell(string myProp) 
     : base() 
    { 
     this.MyProperty = myProp; 
    } 
} 

исход интересно, если я использую код в строке 1, используя свою собственную ячейку, то DataGridView не создает ряд, но если я использую код строки 2, который является обычным TextBoxCell, он создает строку.

Кроме того, если я использую свою ячейку, когда я ввожу что-то в добавленную новую ячейку, она сообщает о той же ошибке: для этого проекта не найден конструктор без параметров.

Так как я могу передать параметр в ячейку во время выполнения? Спасибо

ответ

1

Поскольку никто не отправил никакого ответа, я хотел бы поделиться своим решением. Я не знаю, лучший ли это, но он работает. Я закончил установку класса с DataGridViewTextBoxCellColumn, чем я делаю свойство для этого класса столбца. В классе MyCell я переопределяю метод во время инициализации этой ячейки. Затем я использую this.owningColumn.MyPropertyFromColumn, чтобы получить то, что я хочу. Фактически эта ячейка может получить этот параметр из своего собственного столбца всюду.

Кажется, что ячейка должна иметь без параметров конструктор. Поэтому я предполагаю, что это единственный способ получить параметр из его собственного столбца во время выполнения.

Смежные вопросы