我需要在特定行上将DataGridViewTextBoxCell转换为DatagridVIewButtonCell。我尝试使用以下代码执行此操作:
foreach (DataGridViewRow row in dataGridViewImport.Rows)
{
if(row.Cells["Active"].Value.Equals("false"))
{
DataGridViewButtonCell buttonCell = new DataGridViewButtonCell();
row.Cells["check"] = buttonCell;
}
}
但它没有用。有人知道可能是什么问题?绑定dataSource后,此行为已开始。
此外,我曾尝试创建新列及其工作,但我只需要按钮用于特定行,而不是所有列
DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn();
btnColumn.Name = "test";
dataGridViewImport.Columns.Add(btnColumn);
所有数据绑定代码:
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;
}
}
}
答案 0 :(得分:1)
我尝试使用一些更改代码(不知道你输错了某些名字或意图),如下所示,它可以工作。
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
。
希望你能尽快解决:)
答案 1 :(得分:1)
问题在于事件处理,因为首先,我绑定数据,然后绘制DataGrid然后尝试添加按钮。但我需要在绘图之前添加按钮。所以我找到了这个事件的解决方案
private void dataGridViewImport_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
addButtonsToUnactiveRows();
}