我需要在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
?
答案 0 :(得分:1)
您有两个问题需要解决:
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
请注意,仅当{{1}}属性 设置为true时才有效!
答案 1 :(得分:0)
您需要设置Text
属性,
DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
EditColumn.HeaderText = "Complete";
EditColumn.Name = "Complete";
EditColumn.UseColumnTextForButtonValue = True;
EditColumn.Text = "Complete"; // --Text property added
dataGridView.Columns.Add(EditColumn);