Как разместить элемент управления в DataGridViewCell для отображения, а также редактирования? - PullRequest
2 голосов
/ 22 октября 2008

Я видел Как: размещать элементы управления в Windows Forms DataGridView Cells , который объясняет, как разместить элемент управления для редактирования ячейки в DataGridView. Но как я могу разместить элемент управления для отображения ячейки?

Мне нужно отобразить имя файла и кнопку в одной ячейке. Наш UI дизайнер является графическим дизайнером, а не программистом, поэтому я должен сопоставить код с тем, что он нарисовал, возможно ли это - или мудро - или нет. Мы используем VS2008 и пишем на C # для .NET 3.5, если это имеет значение.

ОБНОВЛЕНИЕ: в сети предлагается создать собственный DataGridViewCell, в котором в качестве первого шага размещается панель; кто-нибудь делал это?

Ответы [ 3 ]

3 голосов
/ 28 января 2009

Согласно вашему «ОБНОВЛЕНИЮ», создание пользовательского DataGridViewCell - это способ, которым это делается. Я сделал это, и это не требует особых изменений из примера кода, доступного из MSDN. В моем случае мне потребовалось несколько пользовательских элементов управления для редактирования, поэтому я унаследовал от DataGridViewTextBoxCell и DataGridViewColumn. Я вставил в свой класс (тот, который унаследован от DataGridViewTextBoxCell) новый пользовательский элемент управления, который реализовал IDataGridViewEditingControl, и все это просто сработало.

Я полагаю, что в вашем случае вы могли бы написать PanelDataGridViewCell, который бы содержал элемент управления MyPanelControl, который наследовал бы от Panel и реализовывал IDataGridViewEditingControl.

2 голосов
/ 19 мая 2009

Вместо использования таблицы данных, как насчет использования TableLayoutPanel. Создайте свой элемент управления, который имеет метку, кнопку и события, и заполните ими панель макета. Ваш контроль становится клеткой, так сказать. Не нужно много, чтобы панель макета таблицы выглядела как сетка данных, если вам нужен такой стиль макета.

1 голос
/ 03 марта 2013

Есть два способа сделать это:

1). Приведите DataGridViewCell к определенному типу ячейки, который существует. Например, преобразуйте DataGridViewTextBoxCell в тип DataGridViewComboBoxCell.

2). Создайте элемент управления и добавьте его в коллекцию элементов управления DataGridView, установите его местоположение и размер в соответствии с ячейкой, которая будет хостом.

См. Пример кода Zhi-Xin Ye ниже, который иллюстрирует приемы:

private void Form_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("name");
    for (int j = 0; j < 10; j++)
    {
        dt.Rows.Add("");
    }
    this.dataGridView1.DataSource = dt;
    this.dataGridView1.Columns[0].Width = 200;

    /*
    * First method : Convert to an existed cell type such ComboBox cell,etc
    */

    DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell();
    ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" });
    this.dataGridView1[0, 0] = ComboBoxCell;
    this.dataGridView1[0, 0].Value = "bbb";

    DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell();
    this.dataGridView1[0, 1] = TextBoxCell;
    this.dataGridView1[0, 1].Value = "some text";

    DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell();
    CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    this.dataGridView1[0, 2] = CheckBoxCell;
    this.dataGridView1[0, 2].Value = true;

    /*
    * Second method : Add control to the host in the cell
    */
    DateTimePicker dtp = new DateTimePicker();
    dtp.Value = DateTime.Now.AddDays(-10);
    //add DateTimePicker into the control collection of the DataGridView
    this.dataGridView1.Controls.Add(dtp);
    //set its location and size to fit the cell
    dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location;
    dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size;
}

Справочник по MSDN: как разместить различные элементы управления в одном столбце в элементе управления DataGridView

Использование 1-го метода выглядит следующим образом:

Different Controls in DataGridView Column

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

enter image description here

Дополнительная информация: Элементы управления в том же столбце DataGridView не отображаются при инициализации сетки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...