问题描述
我的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:
- [问题] 你抽烟吗? [回答](是 复选框)
- [问题]你几岁? [答案](文本 文本框)
- [问题]文档上传[答案]( FileUpload Button )
- [Question] Do you smoke? [Answer] (YesNo Checkbox)
- [Question] How old are you? [Answer] (Text Textbox)
- [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?
推荐答案
您是否看过这些:
以下是MSDN文章...
Following from the MSDN article...
有两种方法可以做到这一点:
There are two ways to do this:
- 投射a
DataGridViewCell
到存在的某个单元格类型。以
为例,将DataGridViewTextBoxCell
转换为
DataGridViewComboBoxCell
类型。 - 创建一个控件并将其添加到
DataGridView
的控件集合中,设置其位置和大小以适合要作为$ b $的单元格b主机。
- Cast a
DataGridViewCell
to a certain cell type that exists. Forexample, convert aDataGridViewTextBoxCell
toDataGridViewComboBoxCell
type. - Create a control and add it into the controls collection of
DataGridView
, set its location and size to fit the cell that to behost.
以下示例代码说明了这些技巧:
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单元格类型添加到列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!