尽管 UseColumnTextForButtonText 设置为 true,但 DataGridView 按钮文本未出现

DataGridView button text not appearing despite UseColumnTextForButtonText set to true

我已将按钮列添加到 DataGridView 并希望在其上显示文本 "Compare"。我已将 Text 属性 设置为比较,将 UseColumnTextForButtonValue 设置为真,但没有显示文本:

在运行时也是如此,所以它不仅仅是不显示在设计器中:

如何显示文本?

编辑:为了繁荣起见,这里是生成的 Designer.cs 文件中的代码。我自己还没有向此表单添加 任何 代码,因此不可能有什么东西会进一步重置它。

// 
// Compare
// 
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Compare.DefaultCellStyle = dataGridViewCellStyle1;
this.Compare.HeaderText = "Compare";
this.Compare.Name = "Compare";
this.Compare.Text = "Compare";
this.Compare.ToolTipText = "Compare the dictionary definition to the system definition";
this.Compare.UseColumnTextForButtonValue = true;

DataGridViewButtonColumn 没有在最后一行的按钮中显示文本。由于在您的示例中您只显示一行,因此未显示。添加更多行,文本将出现在除最后一行之外的所有行中。

Kif答对了:

DataGridViewButtonColumn does not display the text in the button on the last row. Add some more rows, and the text will appear in all but the last row.

但是如果你想全部显示你想要的文字(包括最后一行),你可以简单地实现事件处理程序CellValueChanged并设置单元格值如下:

_yourDataGridView[Compare.Name, rowIndex].Value = "Compire";

虽然有同样的问题,但提供的答案不符合我的要求(添加更多行,而最后一行仍然不显示按钮文本)或没有完全正常工作([= 中的行索引11=] 事件需要 >= 0)。 我还想通过 AllowUserToAddRows 属性 功能来适应这种行为。
为此,datagridview 的 RowsAdded 事件也需要进行一些调整。
这是对我有用的:
UseColumnTextForButtonValue 设置为 true(对于每个 DataGridViewButtonColumn)并设置其文本。

private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
  var grid = (DataGridView)sender;
  if (grid.Columns[e.ColumnIndex] is DataGridViewButtonColumn)
  {
    if (grid.RowCount >= 0)
    {
       //this needs to be altered for every DataGridViewButtonColumn with different Text
       grid.Rows[grid.RowCount - 1].Cells[e.ColumnIndex].Value = "ButtonText";
    }
  }
}

private void dataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
  var grid = (DataGridView)sender;
  //this needs to be altered for every DataGridViewButtonColumn with different Text
  int buttonColumn = 3;
  if (grid.Columns[buttonColumn] is DataGridViewButtonColumn)
  {
    if (grid.RowCount >= 0)
    {
        grid.Rows[grid.RowCount - 1].Cells[buttonColumn].Value = "ButtonText";
    }
  }
}