如何在datagridview中显示一些没有按钮的单元格和一些有按钮的单元格
How display some cell without button and some with a button in datagridview
我有一个 DataGridView,我希望在我的网格中有一个列,其中包含一些显示按钮的单元格和一些不包含按钮的单元格。
为了解决这个问题,我添加了一个 DataGridViewButtonColumn 并编写了这个方法,我调用它来将行添加到我的列中:
private void AttachNewRow(bool validRow)
{
DataGridViewRow newRow = GetNewRow();
if (validRow)
{
newRow.Cells["Info"].Value = "Click me";
}
else
{
// Here I would like to hide the button in the cell
newRow.Cells["Info"].Value = null;
}
}
问题是,当我将单元格值设置为 null 时,我收到一个异常。
我如何在没有按钮的情况下显示其中的一些单元格?
谢谢
看起来你说的 GetNewRow()
returns Row
已经插入 DGV
.
如果该函数知道 'Info' Column
是否包含 Button
,它可以传递它,也许在 Tag
:
if (somecondiiotn) newRow.Columns["Info"].Tag = "Button";
那你可以这样写:
private void AttachNewRow()
{
DataGridViewRow newRow = GetNewRow();
if ( newRow.Cells["Info"].Tag == null ||
newRow.Cells["Info"].Tag != "Button") return;
//..
如果 otoh 调用 AttachNewRow()
的代码具有所需的知识,它可以改为在参数中传递它:
private void AttachNewRow(bool infoButton)
如果知识稍后可用,您仍然可以更改单个单元格。
更新:
由于您现在将条件传递给方法,因此您可以采取相应的行动。
我不知道为什么您的代码会出现异常 - 我不知道。但是要真正隐藏 Button
您应该将单元格更改为 'normal' DataGridViewTextBoxCell
:
else
{
DataGridViewCell cell = new DataGridViewTextBoxCell();
newRow.Cells["Info"] = cell;
您可以在 RowAdded 事件处理程序中尝试类似的操作。这里假设第三列是按钮列:
if (condition)
{
dataGridView1.Rows[e.RowIndex].Cells[2] = new DataGridViewTextBoxCell();
dataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
}
我有一个 DataGridView,我希望在我的网格中有一个列,其中包含一些显示按钮的单元格和一些不包含按钮的单元格。 为了解决这个问题,我添加了一个 DataGridViewButtonColumn 并编写了这个方法,我调用它来将行添加到我的列中:
private void AttachNewRow(bool validRow)
{
DataGridViewRow newRow = GetNewRow();
if (validRow)
{
newRow.Cells["Info"].Value = "Click me";
}
else
{
// Here I would like to hide the button in the cell
newRow.Cells["Info"].Value = null;
}
}
问题是,当我将单元格值设置为 null 时,我收到一个异常。 我如何在没有按钮的情况下显示其中的一些单元格? 谢谢
看起来你说的 GetNewRow()
returns Row
已经插入 DGV
.
如果该函数知道 'Info' Column
是否包含 Button
,它可以传递它,也许在 Tag
:
if (somecondiiotn) newRow.Columns["Info"].Tag = "Button";
那你可以这样写:
private void AttachNewRow()
{
DataGridViewRow newRow = GetNewRow();
if ( newRow.Cells["Info"].Tag == null ||
newRow.Cells["Info"].Tag != "Button") return;
//..
如果 otoh 调用 AttachNewRow()
的代码具有所需的知识,它可以改为在参数中传递它:
private void AttachNewRow(bool infoButton)
如果知识稍后可用,您仍然可以更改单个单元格。
更新:
由于您现在将条件传递给方法,因此您可以采取相应的行动。
我不知道为什么您的代码会出现异常 - 我不知道。但是要真正隐藏 Button
您应该将单元格更改为 'normal' DataGridViewTextBoxCell
:
else
{
DataGridViewCell cell = new DataGridViewTextBoxCell();
newRow.Cells["Info"] = cell;
您可以在 RowAdded 事件处理程序中尝试类似的操作。这里假设第三列是按钮列:
if (condition)
{
dataGridView1.Rows[e.RowIndex].Cells[2] = new DataGridViewTextBoxCell();
dataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
}