datagridview链接cellcontent单击无法正常工作

时间:2013-10-18 07:23:12

标签: c# datagridview

我正在使用此代码将我的列(从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();
     }
 }

1 个答案:

答案 0 :(得分: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%保存。如果您从DataGridView填充DataSource并且只执行一次单元格类型更改,则可以(最快/最简单的选项);在任何其他情况下(您必须手动添加列),在添加列时,最好在开始时设置给定列的类型(在本例中为DataGridViewLinkColumn)。