2009-11-22 3 views
0

나는 특정 행에 사용자 입력의 유효성을 검사하고 값에 따라 변경해야하는 Datagridview를 보유하고 있습니다. 예를 들어 사용자가 DB에없는 제품 코드를 입력하면 제품 대화 상자를 검색하여 제품을 검색하고 올바른 코드를 반환합니다. 그래서 많은 주위를 읽은 후, 나는 CellFormating 이벤트를 처리하기로 결정하지만 두 가지 문제로 실행 다음 e.value 오른쪽 값으로 잘 살고있다DatagridView : 모든 셀의 모든 "onmouseenter"에서 cellFormatting 이벤트가 발생합니까?

  1. 하지만
  2. 그리고 지속하지 않습니다 사건은 수백만 시간과 같이 제기되고 때로는 SO 예외가 발생합니다.

그래서 나는 이벤트 처리기에 mbox를 넣었으며 이제는 프로그램이 아무 것도하지 않고 mbox를 보여줍니다.

여기에서 요점은 양식을 새로 만들었더라도 이벤트가 많이 발생하고 마우스 포인터를 아무 셀 위로 움직일 때마다 이벤트가 다시 발생한다는 것입니다.

여기서 가장 좋은 옵션은 무엇입니까? 울부 짖는 소리는 이벤트 핸들러 내부의 코드입니다 : Rep.Cajero_ProductoExiste 제품이 존재하는 경우는 true, 부울 =을 반환하는 방법이다

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     try 
     { 
      if (e.ColumnIndex == 0 && !dataGridView1.Rows[e.RowIndex].IsNewRow) 
      { 
       if (!Rep.Cajero_ProductoExiste(double.Parse(e.Value.ToString()))) 
       { 
        BuscarEIngresarProducto(ref e); 
       } 
      } 
      MessageBox.Show("Event handler raised"); 
     } 
     catch 
     { 
      e.FormattingApplied = false; 
     } 

    } 

및 방법 BuscarEIngresarProducto()은 다음과 같습니다 :

private void BuscarEIngresarProducto(ref DataGridViewCellFormattingEventArgs e) 
    { 
     Busqueda b = new Busqueda(Rep, 2); 
     if (b.ShowDialog() == DialogResult.OK) 
     { 
      e.Value = b.ProductoCodigo; 
      dataGridView1.CurrentRow.Cells["pk"].Value = b.Producto; 
      e.FormattingApplied = true; 
     } 
    } 

어떤 도움이 될 것입니다 미리 알 수있다. 사전에 감사드립니다. (PD : 죄송합니다. 내 영어, 저는 스페인어 말하기입니다.)

답변

1

CurrentCellDirtyStateChanged를 처리하고 IsCurrentCellDirty 속성을 검사 할 수 있습니다. 맞으면 입력을 확인하십시오.

+0

감사합니다. 방법은 너무 많은 이벤트가 datagridview에서, 그래서 내가 그들 중 많은 읽기 시작해야합니다 생각합니다. – josecortesp

관련 문제