C#datagridviewbuttoncolumn没有文字显示 [英] C# datagridviewbuttoncolumn no text showing
问题描述
我需要在 DataGridViewButtonColumn
上显示一些文本。我已经在 SO
上阅读了很多类似的问题。他们中的许多人回答建议将 UseColumnTextForButtonValue
设置为 True
,不适合我。似乎以一种奇怪的方式, Microsoft
使它至少有一个行
,以便按钮将显示文本
I need to show some texts on the DataGridViewButtonColumn
. I've read lots of similar question about these on SO
. Many of them answers recommend setting UseColumnTextForButtonValue
to True
which doesn't for me. It seems in an odd way that Microsoft
makes it to have at least a row
so that the button will display the text.
以下是我的代码:
DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
EditColumn.HeaderText = "Complete";
EditColumn.Name = "Complete";
EditColumn.UseColumnTextForButtonValue = True;
dataGridView.Columns.Add(EditColumn);
此代码不显示 DataGridViewButtonColumn
:
在这里工作的代码:
dataGridView1.ColumnCount = 2;
dataGridView1.Columns[0].Name = "a";
dataGridView1.Columns[1].Name = "b";
ArrayList row = new ArrayList();
row.Add("1");
row.Add("2");
dataGridView1.Rows.Add(row.ToArray());
DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
btn.Name = "text";
btn.UseColumnTextForButtonValue = true;
dataGridView1.Columns.Add(btn);
此代码有效,但是我从数据库中获取了我的数据,因此我将不会使用 dataGridView.Rows.Add(row.ToArray())
这里。那么如何让文本显示在 DataGridViewButtonColumn
?
This code works but however I am getting my data from a database and thus I won't be using dataGridView.Rows.Add(row.ToArray())
here. So how do I get the text to show on the DataGridViewButtonColumn
?
推荐答案
您有两个问题要解决:
- 如何绑定一个
按钮
列到DataSource
- 如何使
DataSource
不仅创建默认列类型,还可以创建一个(或多个)按钮列
- How bind a
Button
column to aDataSource
- How to make the
DataSource
create not only default column types but also one (or more) button column
第一个问题基本上通过设置列的 DataPropertyName
来解决。
The first issue is basically solved by setting the DataPropertyName
of the column.
但我不知道如何或甚至可以影响自动创建的 ColumnTypes
。
But I do not know how or even if it is possible to influence the ColumnTypes
created automatically.
所以我建议一个解决方法:而不是依靠 AutoGenerateColumns
我们可以在一个小帮手功能:
Therefore I suggest a workaround: Instead of relying on the AutoGenerateColumns
we can do it ourselves in a little helper function:
这将清除列,并为 DataTable
中的每列创建一个新的列,使用列中的列。要告诉我们我们想要哪个列是按钮,我们传递一个带有列名称的字符串,它被空格包围:
This clears the columns and creates a new one for each column in a DataTable
, using the properties of the columns in the table. To tell it which column(s) we want to be buttons we pass a string with the column names, surrounded by spaces:
void CreateSpecialColumns(DataTable dt, DataGridView dgv, string buttons)
{
dgv.Columns.Clear();
for (int i = 0; i < dt.Columns.Count; i++ )
{
DataColumn dc = dt.Columns[i];
if (buttons.Contains(" " + dc.ColumnName + " "))
{
DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn();
buttonColumn.HeaderText = dc.Caption;
buttonColumn.Name = dc.ColumnName;
buttonColumn.ValueType = dc.DataType;
buttonColumn.DataPropertyName = dc.ColumnName;
dgv.Columns.Add(buttonColumn);
}
else
{ // normal columns
int c = dgv.Columns.Add(dc.ColumnName, dc.Caption);
dgv.Columns[c].ValueType = dc.DataType;
dgv.Columns[c].DataPropertyName = dc.ColumnName;
}
}
}
这是我如何称呼使用 DataTable DT
:
dataGridView1.AutoGenerateColumns = false;
CreateSpecialColumns(DT, dataGridView1, " Cook Waiter ", "");
dataGridView1.DataSource = DT;
请注意,这仅适用于 UseColumnTextForButtonValue
属性不设置为true!
Note that this only works if the UseColumnTextForButtonValue
property is not set to true!
这篇关于C#datagridviewbuttoncolumn没有文字显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!