遍历查询行后,修改查询数据有报错;

请问一下,我的这部分代码,想实现针对datagridview行的遍历,再做进一步的计算操作,但运行后,修改单元格的数据,便会报如下错误,请问如何解决呢;

img


```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控件来实现类似的功能。你可以根据实际需求进行修改和调整。

如果你有其他具体的问题或需要进一步的帮助,请提供更多的信息和错误消息,以便我能够提供更准确的解决方案。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^