2013-08-02 133 views
2

我在datagridview中遇到問題。我已經做了在keydown事件的一些代碼,改變標籤的焦點,但是當標籤到達最後一列的,它提供了錯誤當前單元格不能在datagridview中設置爲不可見單元格

「當前小區不能被設置爲不可見的細胞」。

我已經讓最後一個單元格是不可見的,因爲我不想看到那個單元格。

我在KeyDown事件寫下面的代碼

private void m3dgvDepositDetails_KeyDown(object sender, KeyEventArgs e) 
{ 
    try 
    { 
    if (e.KeyCode == Keys.Tab && notlastColumn) 
    { 
     e.SuppressKeyPress = true; 
     int iColumn = m3dgvDepositDetails.CurrentCell.ColumnIndex; 
     int iRow = m3dgvDepositDetails.CurrentCell.RowIndex; 
     if (iColumn == m3dgvDepositDetails.Columns.Count - 1) 
     m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[0, iRow + 1]; 
     else 
     m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[iColumn + 1, iRow]; 
    } 
    } 
    catch (Exception ex) 
    { 
    CusException cex = new CusException(ex); 
    cex.Show(MessageBoxIcon.Error); 
    } 
} 
+0

是否有隱藏的列在網格最後一個可見列之後? – Vasanth

+0

我已經讓最後一個單元格不可見,因爲我不想看到那個單元格。 –

+2

所以你應該使用'if(iColumn> = m3dgvDepositDetails.Columns.Count - 2)' –

回答

3

的錯誤是相當不言自明:您正在設置CurrentCell作爲一種無形的細胞,它是被禁止的,這意味着電池的排該單元格的列是隱藏的。爲避免這種情況,請勿在設置CurrentCell之前隱藏行/列或檢查Visible屬性。

如果問題是最後一列,你應該使用:

private void m3dgvDepositDetails_KeyDown(object sender, KeyEventArgs e) 
    { 
     try 
     { 
      if (e.KeyCode == Keys.Tab && notlastColumn) 
      { 
       e.SuppressKeyPress = true; 
       int iColumn = m3dgvDepositDetails.CurrentCell.ColumnIndex; 
       int iRow = m3dgvDepositDetails.CurrentCell.RowIndex; 
       if (iColumn >= m3dgvDepositDetails.Columns.Count - 2) 
        m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[0, iRow + 1]; 
       else 
        m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[iColumn + 1, iRow]; 

      } 
     } 
     catch (Exception ex) 
     { 
      CusException cex = new CusException(ex); 
      cex.Show(MessageBoxIcon.Error); 
     } 
    } 
0

當您試圖選擇一個隱藏單元格會出現此錯誤。你也不應該將行設置爲在datagridview中不可見,因爲它有錯誤。

一種解決方案是將行設置爲不可見,只是過濾數據源並獲取所需的記錄。這會很慢,但可以作爲解決方法。

OR

您可以嘗試使用以下(未測試)

cm.SuspendBinding(); 
dataGridView1.Rows[0].Visible = false; // Set your datatgridview invisible here 
cm.ResumeBinding(); 
相關問題