0

同じフォーム (form1) で値を使用している場合、getPkRowReport() を実行すると正しく機能します。フォーム 2 の pk が必要な場合は、常に一番上の行にデフォルト設定され、フォーム 2 を起動する前に選択した行にはなりません。フォーム 2 を起動した後にフォーム 1 を見ると、正しい行が選択されていますが、まだトップ レコードの pk。どんな助けでも大歓迎です。

フォーム 1:

    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コレクションを使用して、現在選択されている行を取得する必要があります。行を 1 つだけ選択する予定なので、コードを次のように変更します。

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 に答える