Cast DataGridViewTextBoxCell to DatagridVIewButtonCell WinFo
本文关键字:WinFo DatagridVIewButtonCell to DataGridViewTextBoxCell Cast | 更新日期: 2023-09-27 18:04:57
我需要将DataGridViewTextBoxCell转换为DatagridVIewButtonCell上的具体行。我尝试使用下面的代码来做到这一点:
foreach (DataGridViewRow row in dataGridViewImport.Rows)
{
if(row.Cells["Active"].Value.Equals("false"))
{
DataGridViewButtonCell buttonCell = new DataGridViewButtonCell();
row.Cells["check"] = buttonCell;
}
}
但它没有工作。有人知道是什么问题吗?此行为在我绑定数据源后开始。
我也曾尝试创建新的列和它的作品,但我需要按钮仅为特定的行,而不是所有列
DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn();
btnColumn.Name = "test";
dataGridViewImport.Columns.Add(btnColumn);
所有databindcode: public void prepareDataGridView()
{
dataTable = new DataTable();
addColumnsToDataTable(dataTable);
fillDataTable();
dataGridViewImport.DataSource = dataTable;
addHeaderCheckBox();
addButtonsToUnactiveRows();
styleDataGrid();
}
public void addColumnsToDataTable(DataTable dataTable)
{
dataTable.Columns.Add("check");
dataTable.Columns.Add("Position");
dataTable.Columns.Add("Positionsindex");
dataTable.Columns.Add("Textindex");
dataTable.Columns.Add("Stichwort");
dataTable.Columns.Add("Menge");
dataTable.Columns.Add("EH");
dataTable.Columns.Add("Active");
}
private void fillDataTable()
{
//FILL DATA
}
public void addButtonsToUnactiveRows()
{
foreach (DataGridViewRow row in dataGridViewImport.Rows)
{
if(row.Cells["Active"].Value.Equals("false"))
{
DataGridViewButtonCell buttonCell = new DataGridViewButtonCell();
row.Cells["check"] = buttonCell;
}
}
}
我尝试了一些改变你的代码(不知道你是否打错了一些名字或有意的)如下,它工作。
DataTable dataTable;
private void Form1_Load(object sender, EventArgs e)
{
prepareDataGridView();
}
public void prepareDataGridView()
{
dataTable = new DataTable();
addColumnsToDataTable(dataTable);
fillDataTable();
avaEditDataGridViewImport.DataSource = dataTable;
//addHeaderCheckBox();
addButtonsToUnactiveRows();
//styleDataGrid();
}
public void addColumnsToDataTable(DataTable dataTable)
{
dataTable.Columns.Add("check");
dataTable.Columns.Add("Position");
dataTable.Columns.Add("Positionsindex");
dataTable.Columns.Add("Textindex");
dataTable.Columns.Add("Stichwort");
dataTable.Columns.Add("Menge");
dataTable.Columns.Add("EH");
dataTable.Columns.Add("Active");
}
private void fillDataTable()
{
for (int j = 1; j <= 10; j++)
{
dataTable.Rows.Add(j.ToString(), j, j, j, j, j, j, (j % 2 == 0 ? true : false));
}
}
public void addButtonsToUnactiveRows()
{
foreach (DataGridViewRow row in avaEditDataGridViewImport.Rows)
{
if (row.Cells["Active"].Value.ToString().Equals("False"))
{
DataGridViewButtonCell buttonCell = new DataGridViewButtonCell();
row.Cells["check"] = buttonCell;
}
}
}
你的代码和我的代码有一些不同之处:
我没有使用addHeaderCheckBox()和styleDataGrid()(你没有在这里显示)
fillDataTable()的内部代码
addButtonsToUnactiveRows()中的
DataGridView
和if
语句
希望你能尽快解决:)
问题是在事件处理,因为首先,我绑定数据,然后绘制DataGrid,然后尝试添加按钮。但是我需要在绘制之前添加按钮。所以我找到了这个事件的解决方案
private void dataGridViewImport_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
addButtonsToUnactiveRows();
}