将按钮列添加到 DataGridView 并将条件文本仅应用于单击的按钮
Posted
技术标签:
【中文标题】将按钮列添加到 DataGridView 并将条件文本仅应用于单击的按钮【英文标题】:Add a Button Column to a DataGridView and apply conditional text only to the button clicked 【发布时间】:2021-06-11 20:34:57 【问题描述】:在 DataGridView 中,我们可以处理行级别的按钮文本更改吗?只有单击的按钮必须将文本更改为“Clicked”,其余行上的其他按钮保持默认文本。
我添加了一个按钮实例并将其添加到网格中,如下所示:
var button = new DataGridViewButtonColumn();
button.Name = "statusButton";
button.HeaderText = "Button";
button.Text = "Click to register";
button.UseColumnTextForButtonValue = true;
this.dataGridView1.Columns.Add(button);
但是当我在 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
事件中处理名称更改时,所有按钮都将文本更改为“已单击”。
我是否需要为n
的行数创建n
数量的按钮?
【问题讨论】:
可以分享dataGridView1_CellContentClick
事件的代码吗?
见DataGridViewButtonColumn.UseColumnTextForButtonValue的备注部分。使用.UseColumnTextForButtonValue = true
,您指定 Button.Text 对于列中的所有按钮都是相同的。
@jimi,我的按钮文本按预期显示值,我也可以更改其他列的值。只是按钮值无法每行更改。如果更改它会更改网格的所有行。我怀疑也许我只有一个按钮对象并且我操纵它。我需要为网格中的每一行添加新按钮吗? - 这是我的担心
【参考方案1】:
如文档中所述,UseColumnTextForButtonValue 用于指定 DataGridViewButtonColumn
的所有按钮将使用相同的文本,如列模板的 Text
属性中指定的那样。
如果您需要为每个按钮指定不同的文本并在运行时更改它,您需要将此属性设置为false
(或者不要设置它,因为false
是默认值)。
在这种情况下,单元格的FormattedValue 用于文本。
由于您是在运行时添加 Column,因此 DataSource 中可能没有相应的值(Column 未绑定到数据源)。
在这种情况下,Cell.Value
将是null
,因此FormattedValue
属性将返回一个空字符串,并且您的按钮将显示一个空文本。
要设置默认值,您可以将列的DefaultCellStyle.NullValue
设置为预定义的字符串,然后将其用作按钮的文本。
var buttonColumn = new DataGridViewButtonColumn()
Name = "statusButton",
HeaderText = "Button",
UseColumnTextForButtonValue = false,
DefaultCellStyle = new DataGridViewCellStyle()
NullValue = "Click Me"
;
this.dataGridView1.Columns.Add(buttonColumn);
然后您可以更改单个按钮单元格的文本,设置一个新值,并最终将该值与[Cell].OwningColumn.DefaultCellStyle.NullValue
进行比较,例如,重新设置它:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
if (dataGridView1[e.ColumnIndex, e.RowIndex] is DataGridViewButtonCell cell)
if (cell.Value == null || cell.Value == cell.OwningColumn.DefaultCellStyle.NullValue)
cell.Value = "Clicked";
else
cell.Value = cell.OwningColumn.DefaultCellStyle.NullValue;
做同一件事有不同的方法,这是一个简单直接的方法,它应该可以让你解决当前的问题。
【讨论】:
感谢您@jimi 的努力。出于好奇,我试图设置“启用”和“禁用”按钮,但在 DataGridViewButtonColumn 中找不到该选项。 How to: Disable Buttons in a Button Column in the Windows Forms DataGridView Control以上是关于将按钮列添加到 DataGridView 并将条件文本仅应用于单击的按钮的主要内容,如果未能解决你的问题,请参考以下文章
将行号列添加到绑定到 DataTable 的 DataGridView
c#winfrom应用程序中怎么向DataGridView控件添加带图片的按钮列