1

このコードを使用して、列(dataTableのデータベースから取得)をlinkcolumnとして作成しています

編集:

void show_visits()
    {
        try
        {
            con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sonorepo.mdb");
            con.Open();
        }
        catch (Exception err)
        {
            MessageBox.Show("Error:" + err);
        }
        this.pid = Convert.ToInt32(db.GetPatientID(cmbPatientName.SelectedItem.ToString()));
        cmd1 = new OleDbCommand("Select Patient_ID,VisitNo,VisitDate,remark from Patient_Visit_Details WHERE Patient_ID=" + pid, con);
        dt = new DataTable();
        adp1 = new OleDbDataAdapter(cmd1);
        adp1.Fill(dt);
        this.dataGridViewVisits.DataSource = dt;
        foreach (DataGridViewRow row in dataGridViewVisits.Rows)
        {
            DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
            linkCell.Value = row.Cells[2].Value;
            row.Cells[2] = linkCell;
        }
        this.dataGridViewVisits.CellContentClick+=new DataGridViewCellEventHandler(this.CellContentClick);

    }

この列のリンク(コンテンツリンク)をクリックするとフォームを開くために以下のコードを使用していますが、イベントがトリガーされません。どこで間違いを犯していますか?

 private void CellContentClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.RowIndex >= 0 && ((DataGridView)sender).Columns[e.ColumnIndex].GetType() == typeof(DataGridViewLinkColumn))
     {
         int pid = Convert.ToInt32(dataGridViewVisits.Rows[e.RowIndex].Cells["Patient_ID"].Value);
         ViewR viewrepofrm = new ViewR(pid);
         viewrepofrm.MdiParent = this.ParentForm;
         viewrepofrm.Show();
     }
 }
4

1 に答える 1

0

列のタイプは、に追加するときに設定されますDataGridView。デフォルトのタイプ ( ) に依存して列を追加していることは理解していますがTextBoxColumn、これは最初のコードでは変更されていません (セルを列ではなく に変換してDataGridViewLinkCellいます)。したがって、コードは次の変更で機能するはずです。

private void CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].GetType() == typeof(DataGridViewLinkCell))
    {
         int pid = Convert.ToInt32(dataGridViewVisits.Rows[e.RowIndex].Cells["Patient_ID"].Value);
         ViewR viewrepofrm = new ViewR(pid);
         viewrepofrm.MdiParent = this.ParentForm;
         viewrepofrm.Show();
    }
}

いずれにせよ、あなたが行っている種類の細胞型の変更は、すべての状況で 100% 保存されるわけではないことに注意してください。DataGridViewaから にデータを入力していて、セル タイプの変更を 1 回だけ実行する場合は、DataSource問題ありません (最も迅速で簡単なオプション)。他の状況 (列を手動で追加する必要があるDataGridViewLinkColumn場合) では、列を追加するときに、最初に特定の列 (この場合) のタイプを設定することをお勧めします。

于 2013-10-18T07:41:50.580 に答える