2013-10-18 37 views
1

我使用这个代码,以使我的专栏(取从DataTable中的数据库)作为linkcolumndatagridview的链接cellcontent点击不工作

编辑:

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(); 
    } 
} 
+0

错误或输出在哪里? –

+0

@CarlosLanderas我没有收到任何错误,只是当我点击单元格内容链接'ViewR'表单没有得到显示,应该根据需要显示 – Durga

+0

CellContentClick实际上是在事件中定义的调用? –

回答

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

+0

是它的工作现在,我已经显示了我的完整代码,我现在将链接单元添加到正确的位置,就像你说的那样,因为我正在获取数据表中的数据,所以我这是否像这样 – Durga

+0

@Durga我这么认为。那么问题就解决了。 – varocarbas

+0

是的问题解决了,我只是想知道我是否以正确的方式做,因为你说这样的问题在我的脑海中提出 – Durga