2013-08-02 2 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을 설정하는 경우가 금지되어 셀의 행 또는 그 셀의 열이 숨겨집니다. 이를 방지하려면 행/열을 숨기지 말고 을 설정하기 전에 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에서 행을 보이지 않게 설정해서는 안됩니다.

한 가지 해결책은 행을 숨김으로 설정하는 대신 데이터 소스를 필터링하고 원하는 레코드 만 가져 오는 것입니다. 느려지지만 해결 방법으로 사용할 수 있습니다.

또는

당신은

cm.SuspendBinding(); 
dataGridView1.Rows[0].Visible = false; // Set your datatgridview invisible here 
cm.ResumeBinding(); 
관련 문제