0

当我执行 getPkRowReport() 时,如果我在同一表单 (form1) 上使用该值,它会正常工作。如果我需要表格 2 的 pk,它始终默认为第一行,而不是我在启动表格 2 之前选择的行。如果我在启动表格 2 后查看表格 1,则选择了正确的行,但我仍然得到pk为最高记录。任何帮助,将不胜感激。

表格一:

    private int pkFromReport;
    public int PkFromReport
    {
        get
        {
            pkFromReport = getPkRowReport();
            return pkFromReport;
        }
    } 

    private int getPkRowReport()
    {
        if (dgvReportGrid.CurrentRow != null)
        {
            //get selected row index
            int index = this.dgvReportGrid.CurrentRow.Index;
            //get pk of selected row using index
            string cellValue = dgvReportGrid["rptNo", index].Value.ToString();
            //change pk string to int
            int pKey = Int32.Parse(cellValue);

            return pKey;
        }
        else
        {
            return -1;
        }
    }

表格 2:

private frmMain mainForm = new frmMain();

private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = mainForm.PkFromReport.ToString();
    }
4

1 回答 1

1

CurrentRow获取包含当前单元格的行。当您的表单失去焦点时,您选择的行不再是当前行。

您应该使用该SelectedRows集合来获取您当前选择的行。由于您计划只选择一个行,因此请更改您的代码,如下所示:

private int getPkRowReport()
{
    if (dgvReportGrid.SelectedRows.Count > 0)
    {
        //get selected row index
        int index = this.dgvReportGrid.SelectedRows[0].Index;
        //get pk of selected row using index
        string cellValue = dgvReportGrid["rptNo", index].Value.ToString();
        //change pk string to int
        int pKey = Int32.Parse(cellValue);

        return pKey;
    }
    else
    {
        return -1;
    }
}
于 2012-08-06T03:43:09.117 回答