C#datagridviewbuttoncolumn没有文字显示

时间:2016-06-14 15:06:00

标签: c# datagridview

我需要在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

2 个答案:

答案 0 :(得分:1)

您有两个问题需要解决:

  • 如何绑定 Button列到DataSource
  • 如何使DataSource不仅创建默认列类型,还创建一个(或更多)按钮列

enter image description here

第一个问题基本上是通过设置列的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);