1

クライアントが取り組んでいるケースのリストを表示する WinForms アプリに datagridview があります。datagridview の「CaseNo」列をダブルクリックすると、選択したケースに固有の新しいフォームが開きます。ダブルクリック イベントのコードは次のとおりです。

private void dataGV_CellCoubleClick(object sender, DataGridCellEventArgs e)
{ 
    if (e.ColumnIndex == 0)
    {
        DataTable table = (DataTable)dataGV.DataSource;
        string strCaseNo = table.Rows[e.RowIndex][e.ColumnIndex].ToString();
        frmCase fC = new frmCase(strCaseNo);
        fC.MdiParent = this.MdiParent;
        fC.Show;
    }
}

ケースフォームは正常に開きます。ただし、ユーザーが以前に列ヘッダーをダブルクリックして並べ替えを datagridview に適用していた場合、データ行をダブルクリックすると間違ったケースが開きます。

例えば:

ケース名

1 スミス

2 ジョーンズ

3 ウォルター

最初に 2 をクリックすると、Jones の frmCase が開きます。ただし、最初に [名前] 列をダブルクリックすると、次のようにアルファベット順に並べ替えられます。

ケース名

2 ジョーンズ

1 スミス

3 ウォルター

次に 2 をクリックすると、Smith のケースが開きます (Jones ではなく)。

並べ替えの後、セルをダブルクリックすると、以前にその行を占めていた値が返されるようです (ユーザー画面で並べ替えられていても、データソースが並べ替えられていないかのように)。

誰かがこれを修正する方法を教えてください。

4

1 に答える 1

3

グリッドではなく、基になるテーブルにアクセスしています。次のことを試してください。

private void dataGV_CellCoubleClick(object sender, DataGridCellEventArgs e)
{ 
    if (e.ColumnIndex == 0)
    {
        string strCaseNo = ((DataGridView)sender).Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString();
        frmCase fC = new frmCase(strCaseNo);
        fC.MdiParent = this.MdiParent;
        fC.Show;
    }
}
于 2012-11-12T15:37:54.410 に答える