【问题标题】:C# datagridviewbuttoncolumn no text showingC# datagridviewbuttoncolumn 没有文字显示
【发布时间】:2016-06-14 15:05:59
【问题描述】:

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

【问题讨论】:

标签: c# datagridview


【解决方案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 属性设置为 true 时有效!

【讨论】:

    【解决方案2】:

    你需要设置Text属性,

    DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
    EditColumn.HeaderText = "Complete";
    EditColumn.Name = "Complete";
    EditColumn.UseColumnTextForButtonValue = True;
    EditColumn.Text = "Complete";                  // --Text property added
    
    dataGridView.Columns.Add(EditColumn);
    

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 2018-10-30
      • 2015-06-26
      • 2017-01-19
      • 2011-11-07
      • 2014-09-24
      • 2013-04-26
      • 2015-04-30
      • 1970-01-01
      相关资源
      最近更新 更多