我需要在DataGridViewButtonColumn
上显示一些文本。我在SO
上读到过很多类似的问题。他们中的许多人建议将UseColumnTextForButtonValue
设置为True
,但对我来说不是这样。看起来很奇怪,Microsoft
至少要有一个row
,这样按钮才能显示文本。
以下是我的代码:
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
上呢?
发布于 2016-06-15 02:24:21
您有两个问题要解决:
Button
列绑定到DataSource
DataSource
不仅创建缺省列类型,还创建一个(或多个)按钮列
通过设置列的DataPropertyName
,基本上解决了第一个问题。
但我不知道如何甚至是否可能影响自动创建的ColumnTypes
。
因此,我建议一个变通方法:我们可以在一个小帮手函数中自己做,而不是依赖于AutoGenerateColumns
:
这将清除列,并使用表中列的属性为DataTable
中的每一列创建一个新列。为了告诉它我们想要作为按钮的列,我们传递一个包含列名的字符串,并用空格括起来:
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时,这才有效!
发布于 2020-04-20 16:28:31
您需要设置Text
属性,
DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
EditColumn.HeaderText = "Complete";
EditColumn.Name = "Complete";
EditColumn.UseColumnTextForButtonValue = True;
EditColumn.Text = "Complete"; // --Text property added
dataGridView.Columns.Add(EditColumn);
https://stackoverflow.com/questions/37815757
复制相似问题