我有两个网格视图:父母和孩子 . 我的目标是使用子表中的值更新父表(这将在数据库中完成) . 为了完成这个,我需要从子gridview读取值 . 我创建了下面的代码但子行没有正确读取(我的gettin索引超出范围错误):

protected void btnUpdateSelected_Click(object sender, EventArgs e)
    {
        try
        {
            foreach (GridViewRow row_master in gvParent.Rows)
            {
                if (row_master.RowType == DataControlRowType.DataRow)
                {
                    GridView gvChild = (GridView)gvParent.Rows[row_master.RowIndex].FindControl("gvChild");

                    if (gvChild != null)
                    {
                    foreach (GridViewRow row_child in gvChild.Rows)
                    {
                        if (row_child.RowType == DataControlRowType.DataRow)
                        {
                            CheckBox chckboxChild = (CheckBox)row_child.FindControl("chckboxChild");

                            if (chckboxChild.Checked == true & gvChild.Rows.Count == 1)
                            {
                                int index_master = Convert.ToInt32(row_master.RowIndex.ToString());
                                int index_child = Convert.ToInt32(row_child.RowIndex.ToString());

                                int rowID_a = Convert.ToInt32(gvParent.DataKeys[index_master].Values["ID"]);
                                int rowID_b = Convert.ToInt32(gvChild.DataKeys[index_master].Values["ID"]);
                                int serverID = Convert.ToInt32(gvParent.DataKeys[index_master].Values["ServerID"]);
                                int id = Convert.ToInt32(gvChild.DataKeys[index_child].Values["DeviceID"]);
                                int activeStatusID = Convert.ToInt32(gvChild.DataKeys[index_child].Values["ActiveStatusID"]);
                                string managedBy = gvChild.DataKeys[index_child].Values["ManagedBy"].ToString();
                                string monitoredBy = gvChild.DataKeys[index_child].Values["MonitoredBy"].ToString();
                                int managementProtocolID = Convert.ToInt32(gvChild.DataKeys[index_child].Values["ManagementProtocolID"]);

                            }
                        }
                    }
                    }
                }
            }
        }
        catch (Exception ex)
        {
        }
    }