首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C# datagridviewbuttoncolumn按钮列无文本显示

C# datagridviewbuttoncolumn按钮列无文本显示
EN

Stack Overflow用户
提问于 2016-06-14 23:06:00
回答 2查看 910关注 0票数 2

我需要在DataGridViewButtonColumn上显示一些文本。我在SO上读到过很多类似的问题。他们中的许多人建议将UseColumnTextForButtonValue设置为True,但对我来说不是这样。看起来很奇怪,Microsoft至少要有一个row,这样按钮才能显示文本。

以下是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
        DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
        EditColumn.HeaderText = "Complete";
        EditColumn.Name = "Complete";
        EditColumn.UseColumnTextForButtonValue = True;
        dataGridView.Columns.Add(EditColumn);

此代码不显示DataGridViewButtonColumn上的文本

这里运行的代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
        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上呢?

EN

回答 2

Stack Overflow用户

发布于 2016-06-15 02:24:21

您有两个问题要解决:

  • 如何将 Button列绑定到DataSource
  • How,以使DataSource不仅创建缺省列类型,还创建一个(或多个)按钮列

通过设置列的DataPropertyName,基本上解决了第一个问题。

但我不知道如何甚至是否可能影响自动创建的ColumnTypes

因此,我建议一个变通方法:我们可以在一个小帮手函数中自己做,而不是依赖于AutoGenerateColumns

这将清除列,并使用表中列的属性为DataTable中的每一列创建一个新列。为了告诉它我们想要作为按钮的列,我们传递一个包含列名的字符串,并用空格括起来:

代码语言:javascript
代码运行次数:0
运行
复制
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调用它的方式

代码语言:javascript
代码运行次数:0
运行
复制
dataGridView1.AutoGenerateColumns = false;
CreateSpecialColumns(DT, dataGridView1, " Cook Waiter ", "");
dataGridView1.DataSource = DT;

请注意,只有当UseColumnTextForButtonValue属性为而不是设置为true时,这才有效!

票数 1
EN

Stack Overflow用户

发布于 2020-04-20 16:28:31

您需要设置Text属性,

代码语言:javascript
代码运行次数:0
运行
复制
DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn();
EditColumn.HeaderText = "Complete";
EditColumn.Name = "Complete";
EditColumn.UseColumnTextForButtonValue = True;
EditColumn.Text = "Complete";                  // --Text property added

dataGridView.Columns.Add(EditColumn);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37815757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档