将不同的 DataGridView 单元格类型添加到列 [英] Adding Different DataGridView Cell Types to a Column

查看:23
本文介绍了将不同的 DataGridView 单元格类型添加到列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 datagridview 有两列([问题]、[答案]).根据已知的问题类型(是/否复选框文本文本框FileUpload Button) 我希望列单元格具有相应的控件.

My datagridview has two columns ([Question], [Answer]). Depending on the known question type (Yes/No Checkbox, Text Textbox, FileUpload Button) I want the column cell to have the respective control.

示例

Datagridview 行:

Datagridview Rows:

  1. [问题] 你抽烟吗?[Answer] (YesNo 复选框)
  2. [问题] 你几岁了?[Answer] (Text Textbox)
  3. [问题] 文档上传 [答案] (FileUpload 按钮)
  1. [Question] Do you smoke? [Answer] (YesNo Checkbox)
  2. [Question] How old are you? [Answer] (Text Textbox)
  3. [Question] Document upload [Answer] (FileUpload Button)

<小时>

工作

我以编程方式创建了我的数据网格视图.


Work

I programmatically create my datagridviews.

Private Sub FormatQuestionDgv(ByVal dgv As DataGridView)
    Dim ColQ As New DataGridViewTextBoxColumn
    Dim ColA As New DataGridViewColumn

    'Header text
    ColQ.HeaderText = "Question"
    ColA.HeaderText = "Answer"

    'Name
    ColQ.Name = "ColQ"
    ColA.Name = "ColA"

    'Widths
    ColQ.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    ColA.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

    'Add columns
    With dgv.Columns
        .Add(ColQ)
        .Add(ColA)
    End With
End Sub

<小时>

问题

正如您在我的工作中看到的,答案列是 DataGridViewColumn 类型.我当时不知道问题类型.因此,我将其声明为普通列而不是 DataGridViewCheckBoxColumnDataGridViewTextBoxColumnDataGridViewButtonColumn...


Problem

As you can see in my work, the answer column is of DataGridViewColumn type. I do not know the question type at that moment. Therefore I declare it as a normal column instead of DataGridViewCheckBoxColumn, DataGridViewTextBoxColumn, DataGridViewButtonColumn...

由于这些与 DataGridViewColumn 的类型不同,我收到以下错误:

Since those are not the same type as DataGridViewColumn, I get the following error:

如何在 1 个 DataGridViewColumn 中添加不同的控件类型?甚至有可能吗?

How do I go about adding different control types in 1 DataGridViewColumn? Is it even possible?

推荐答案

你看过这些:

在 DataGridViewColumn 中混合单元格类型

一列的DataGridview单元格不能有不同的类型

http://social.msdn.microsoft.com/Forums/windows/en-US/148b232b-ce8c-4c49-b35d-50d8a5c448d1/different-cell-types-in-a-datagridview-列

根据 MSDN 文章...

Following from the MSDN article...

有两种方法可以做到这一点:

There are two ways to do this:

  1. DataGridViewCell 转换为存在的特定单元格类型.为了例如,将 DataGridViewTextBoxCell 转换为DataGridViewComboBoxCell 类型.
  2. 创建一个控件并添加到控件集合中DataGridView,设置它的位置和大小以适合要显示的单元格主持人.
  1. Cast a DataGridViewCell to a certain cell type that exists. For example, convert a DataGridViewTextBoxCell to DataGridViewComboBoxCell type.
  2. Create a control and add it into the controls collection of DataGridView, set its location and size to fit the cell that to be host.

以下是一些示例代码,用于说明这些技巧:

Here's some sample code which illustrates these tricks:

private void Form5_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;
}

这篇关于将不同的 DataGridView 单元格类型添加到列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆