C#datagridviewbuttoncolumn没有文字显示 [英] C# datagridviewbuttoncolumn no text showing

查看:494
本文介绍了C#datagridviewbuttoncolumn没有文字显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在 DataGridViewButtonColumn 上显示一些文本。我已经在 SO 上阅读了很多类似的问题。他们中的许多人回答建议将 UseColumnTextForButtonValue 设置为 True ,不适合我。似乎以一种奇怪的方式, Microsoft 使它至少有一个,以便按钮将显示文本

I need to show some texts on the DataGridViewButtonColumn. I've read lots of similar question about these on SO. Many of them answers recommend setting UseColumnTextForButtonValueto True which doesn't for me. It seems in an odd way that Microsoft makes it to have at least a row so that the button will display the text.

以下是我的代码:

        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

This code works but however I am getting my data from a database and thus I won't be using dataGridView.Rows.Add(row.ToArray()) here. So how do I get the text to show on the DataGridViewButtonColumn ?

推荐答案

您有两个问题要解决:


  • 如何绑定一个按钮列到 DataSource

  • 如何使 DataSource 不仅创建默认列类型,还可以创建一个(或多个)按钮列

  • How bind a Button column to a DataSource
  • How to make the DataSource create not only default column types but also one (or more) button column

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

The first issue is basically solved by setting the DataPropertyName of the column.

但我不知道如何或甚至可以影响自动创建的 ColumnTypes

But I do not know how or even if it is possible to influence the ColumnTypes created automatically.

所以我建议一个解决方法:而不是依靠 AutoGenerateColumns 我们可以在一个小帮手功能:

Therefore I suggest a workaround: Instead of relying on the AutoGenerateColumns we can do it ourselves in a little helper function:

这将清除列,并为 DataTable 中的每列创建一个新的列,使用列中的列。要告诉我们我们想要哪个列是按钮,我们传递一个带有列名称的字符串,它被空格包围:

This clears the columns and creates a new one for each column in a DataTable, using the properties of the columns in the table. To tell it which column(s) we want to be buttons we pass a string with the column names, surrounded by spaces:

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!

Note that this only works if the UseColumnTextForButtonValue property is not set to true!

这篇关于C#datagridviewbuttoncolumn没有文字显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆