请问一下,我的这部分代码,想实现针对datagridview行的遍历,再做进一步的计算操作,但运行后,修改单元格的数据,便会报如下错误,请问如何解决呢;
```c#
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridView row in dataGridView1.Rows)
{
string PreMaterial = dataGridView1.Rows[e.RowIndex - 1].Cells[2].Value.ToString();
string CurMaterial = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
if (PreMaterial != CurMaterial)
{
return;
}
else
{
if (e.RowIndex > 0) // 不是第一行
{
int rowIndex = e.RowIndex;
float 上一行结存数量 = Convert.ToSingle(dataGridView1.Rows[rowIndex - 1].Cells[6].Value);
float 当前行入库数量, 当前行出库数量;
if (dataGridView1.Rows[rowIndex].Cells[4].Value == DBNull.Value)
{
当前行入库数量 = 0;
}
else
{
当前行入库数量 = Convert.ToSingle(dataGridView1.Rows[rowIndex].Cells[4].Value);
}
if (dataGridView1.Rows[rowIndex].Cells[5].Value == DBNull.Value)
{
当前行出库数量 = 0;
}
else
{
当前行出库数量 = Convert.ToSingle(dataGridView1.Rows[rowIndex].Cells[5].Value);
}
float 当前行结存数量 = 上一行结存数量 + 当前行入库数量 - 当前行出库数量;
当前行结存数量 = (float)Math.Round(当前行结存数量, 2);
dataGridView1.Rows[rowIndex].Cells[6].Value = 当前行结存数量.ToString("0.00");
}
}
}
}
```
是DataGridViewRow,改成它就可以了,谢谢了@threenewbee
DataGridRow,不是 DataGridView
【以下回答由 GPT 生成】
根据提供的代码和问题描述,我看到你在C++中实现了一个 dataGridView1_CellEndEdit
的事件处理程序,它用于遍历一个 datagridview
的行并修改其中的单元格数据。你遇到的错误信息没有提供具体的错误消息,所以我无法准确判断问题所在。不过,你提供的代码实际上是C#代码,不是C++代码。在C++中没有类似的 DataGridView
类和 CellEndEdit
事件。
如果你想在C++中实现类似的功能,你可以使用其他UI框架(如MFC或Qt)中的datagrid控件来实现。这些UI框架提供了类似的控件和事件处理功能。
下面是一个示例,展示了如何使用MFC中的CListCtrl控件来实现类似的功能:
// 在类的头文件中声明CListCtrl控件
CListCtrl m_listCtrl;
// 在对话框的OnInitDialog函数中初始化CListCtrl控件
BOOL CMyDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 添加列表控件
m_listCtrl.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT, CRect(10, 10, 400, 200), this, IDC_LIST1);
// 添加列
m_listCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100);
// ...
// 添加行和数据
m_listCtrl.InsertItem(0, _T("Row 1"));
m_listCtrl.SetItemText(0, 0, _T("Data 1-1"));
m_listCtrl.SetItemText(0, 1, _T("Data 1-2"));
// ...
return TRUE;
}
// 在列表控件的LVN_ENDLABELEDIT消息处理函数中修改单元格数据(例如双击单元格后)
void CMyDlg::OnLvnEndlabeleditList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem = &(pDispInfo)->item;
CString strNewText = pItem->pszText;
int nRow = pItem->iItem;
int nCol = pItem->iSubItem;
// 修改数据...
*pResult = 0;
}
在以上示例中,我们使用MFC中的CListCtrl控件来实现类似的功能。你可以根据实际需求进行修改和调整。
如果你有其他具体的问题或需要进一步的帮助,请提供更多的信息和错误消息,以便我能够提供更准确的解决方案。
【相关推荐】