函数未在 C# 中执行

Function not executing in C#

我有一个函数,根据 table 中找到的学生 ID,用从学生 table 中合并的学生姓名和学生姓氏填充 DataGridView 中的列,我之前提到的那个专栏位于其中。

函数为:

public void replace_namesSurnames()
        {
            foreach (DataGridViewRow row in attendance_dgw.Rows)
            {
                int student_id = Convert.ToInt32(row.Cells["student_id"].Value);
                if (row.Index < attendance_dgw.Rows.Count - 1)
                {
                    string text = attendanceRecording.Tables["students"].Rows[student_id - 1]["student_name"].ToString() + " " + attendanceRecording.Tables["students"].Rows[student_id - 1]["student_surname"].ToString();
                    row.Cells["stud_nameSurname"].Value = text;
                }
            }
        }

如果我通过单击按钮执行此功能,它就可以工作。第一次初始化表单时也有效

我已尝试向该 DataGridView 添加一个 CellValueChanged 事件,但该函数未执行:

        private void attendance_dgw_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            replace_namesSurnames();
        }

有什么解决办法吗?我真的看不出这里有什么问题。

好的,所以我的朋友帮我找到了解决方案。

首先,我忘了说,这个函数的主要目的是,相应地改变 Name Surname 以改变 student_id。但!正在使用单独的表格更改学生 ID。

所以主要问题(为什么这一切都开始了)是,那个更新那些名字姓氏值的函数位于主窗体中,但我是从窗体中执行它的,它改变了学生 ID。

在更改学生 ID 的表单中,我制作了一个主表单对象,以访问该主表单中的功能。但是,程序似乎没有看到该函数内部的内容,这就是它没有执行的原因。

所以,解决办法是—— 将主窗体传递给进行更改的窗体。

detailsTableForm details = new detailsTableForm(attendanceRecording, cellValue,e.RowIndex,e.ColumnIndex,0,columnName,attendance_dgw, this);

那里的主要焦点是将“this”(主窗体)传递给“detailsTableForm”(窗体,在主窗体中更改学生 ID)。 当我将“this”(主表单)传递给“detailsTableForm”时,我将收到的表单分配给“detailsTableForm”中的表单对象,然后一切正常。