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

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

问题描述

我的datagridview有两列([问题],[答案])。根据已知的问题类型是/否 复选框文本 文本框 FileUpload 按钮),我希望列单元格具有相应的 control

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. [问题] 你抽烟吗? [回答]( 复选框

  2. [问题]你几岁? [答案](文本 文本框

  3. [问题]文档上传[答案]( FileUpload Button

  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



我以编程方式创建我的datagridviews。


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 。我当时不知道问题的类型。因此,我将其声明为普通列,而不是 DataGridViewCheckBoxColumn DataGridViewTextBoxColumn DataGridViewButtonColumn ...


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 /在一个datagridview列中的不同单元格类型

以下是MSDN文章...

Following from the MSDN article...

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

There are two ways to do this:


  1. 投射a DataGridViewCell 到存在的某个单元格类型。以
    为例,将 DataGridViewTextBoxCell 转换为
    DataGridViewComboBoxCell 类型。

  2. 创建一个控件并将其添加到
    DataGridView 的控件集合中,设置其位置和大小以适合要作为$ b $的单元格b主机。

  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天全站免登陆