2014-10-07 7 views
0

셀 번호 3이 변경되면 행의 네 번째 셀 값을 변경하고 싶습니다. 내 눈금에 대한 EditEnding 메서드가 있습니다. 아래 내 방법입니다. datagridrow을 편집하지 마십시오C# DataRow에 자동으로 값 설정

private void dataGrid1_EditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    // initializing DataRowView from my datagrid 
    DataRowView drv = (DataRowView)dataGrid1.CurrentItem; 

    // checking if there were any changes 
    if (drv.Row[3, DataRowVersion.Original] != drv.Row[3]) 
    { 
     //set value to cell 
    } 
} 
+1

셀 3은 인덱스 2에 있습니다. – Steve

답변

1

글쎄, 여기에 게시하는 것을 잊어 버렸습니다.

가 우선이 EditEnding 이벤트와 그것을했다, 그 모습 :

private void dataGrid1_EditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    DataRowView drv = (DataRowView)dataGrid1.CurrentItem; 

    if (drv.Row[3, DataRowVersion.Original] != drv.Row[3]) 
    { 
     rowView.Row.SetField(4, /* my logic here */); 
    } 
} 

문제는 단지 두 번째 편집에서 값을 추가 하였다. 그럼 난 내 생각을 변경하고 같았다 내 DataTable을,에있는 rowChanged 이벤트를 추가 : 방법은 (는 네 번째 행이 변경했다고, 알았어했다) 무한 루프로가는

static void dtSP_RowChanged(object sender, DataRowChangeEventArgs e) 
    { 
     bool temp = false; 

     try 
     { 

      temp = e.Row[4, DataRowVersion.Original] == e.Row[4]; 
     } 
     catch { } 

     if (temp && int.Parse(e.Row[3].ToString()) != -1) 
     { 
      e.Row[4] = (/* my logic */); 
     } 
    } 

.

그리고 내가 이것을보고 : 내가 한 줄 긴 코드로 종료 한 http://www.windowsdevcenter.com/pub/a/dotnet/2003/05/26/datacolumn_expressions.html

:

dtSP.Columns[4].Expression = "expression"; 

@blindmeis, 미안, 내가 ADO.NET 사용 언급 forgott

+0

지금까지 'CurrentItem'이 존재한다는 것을 알지 못했습니다 ... 그런 유용한 속성. – J3soon

0

- WPF에서 기본 개체를 편집 :

<DataGrid x:Name="dataGrid1"... CellEditEnding="dataGrid1_EditEnding"> 

및 방법 : 정말 그것을

그리드 정의의

을 완료하는 방법을 모른다!

이 바인딩 된 속성은 3 셀 때에서 INotifyPropertyChanged이 그리드를 통지합니다 다음 변경 세포 (4)에 결합 특성에 대한 변경을 의미하고 이미 cell4 값을 계산하는 로직이있는 경우 변경

+0

그 이유는 무엇입니까? DataGrid와 DataTable간에 적절한 바인딩을 설정하면 DataTable의 행을 변경하면 둘 다 편집해야합니다. – Adranal

+0

?? 다른 셀이 바뀌면 셀 값을 변경하고 싶다고 썼다. 내가 말한 것은 당신이 mvvm 방식으로 가야한다는 것입니다. 속성 (cell3에 바인딩)이 변경되면 다른 속성 (셀 4)을 변경하여 코드 숨김에서 무엇인가를하고 싶습니까? – blindmeis

+0

내 대답을 잊어 버려, 이제는 ADO.Net에서 일한다는 것을 알았습니다. – blindmeis

0

를 표시합니다 cell3이 변경되면 3 열에 바인딩 된 속성이 변경 될 때 3 열에 바인딩 된 속성의 INotifyPropertyChanged를 호출해야합니다. & 4.