2013-10-18 78 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