2012-07-04 1 views
0

색상 열이있는 표가 있다고 가정 해 보겠습니다. 색상은 다양한 값을 가질 수 있습니다. 한 번에 주어진 열의 항목을 처리 할 수있는 C# 메서드가 있습니다.LINQ를 통해 필터링 된 DataTable의 "하위 집합"에서 작업하는 방법은 무엇입니까?

foreach(colorname in mytable.getDistinctColornames) 
    monocolorMethod(mytable.getSubTableOnlyContainingRowsWithColor(colorname)) 

가 어떻게 그 우아 할 것 ... : 따라서, 나는 하시겠습니까?

모든 가격대에 데이터를 다시 복사하지 마십시오. &. 나는 데이터 테이블에 대한보기를 원합니다. 뷰 그 것 전용 "쇼"(I 필터링 된 부분 집합에 쓸 때 즉, 원래의 테이블에 기록됩니다) 지정된 열의 행 및 "쓰기"보기

편집 :

'Car'테이블이 있고 'Color = Red'가있는 모든 자동차의 'Type'열에서 'Sedan'을 'Truck'으로 바꾸고 싶습니다.

다음 코드를 어떻게 제공합니까?

DataTable cars (...); // the data 

DataView dv = cars.DefaultView; 
dv.RowFilter = "Color='Red'"; 

< 여기서 나는 DataView>를 반복하고 싶습니다. 다음 코드는 작동하지 않습니다

foreach (row in dv.AsEnumerable) 
{ 
    if(row["Type"] == "Sedan") 
    row["Type"] = "Truck"; 
} 

편집 2 :

제안이 http://msdn.microsoft.com/fr-fr/library/system.data.dataview.allowedit.aspx 찾을 수

view.AllowEdit = true; 
view[0].BeginEdit(); 
view[0]["FirstName"] = "Mary"; 
view[0]["LastName"] = "Jones"; 
view[0].EndEdit(); 
+0

이미 시도했거나 작업중인 코드에 대한 코드를 표시 할 수 있습니까? –

+0

@BradRem : 불행히도 아니요 –

답변

1

이 사용하려고 했 DataView 클래스? 그것은 당신이 사용하지 않고 달성 할 정확히처럼 보이는 LINQ : http://msdn.microsoft.com/en-us/library/fdcwwhez

사용의 예 :

_dt = new DataTable("") {Columns = {new DataColumn("ID"), new DataColumn("Name"), new DataColumn("Order")}}; 
_dt.Rows.Add(1, "one", 1); 
_dt.Rows.Add(2, "two", 3); 
_dt.Rows.Add(3, "three", 2); 
_dt.Rows.Add(4, "four", 5); 
:

하자가 4 행으로 _dt라는 DataTable 객체가 말한다

데이터를 필터링하지 않지만 정렬 작업을 수행하는 DataView를 쉽게 만들 수 있습니다.

_dv = new DataView(_dt, "", "Order, Name", DataViewRowState.CurrentRows); 

DataView에 새 행을 추가 할 수도 있고 해당 DataTable에 새 행이 직접 추가되어 _dt 개체에 추가되기 때문에 새 행을 추가 할 수도 있습니다. 정렬 순서는도 업데이트되며,

var newRow = _dv.AddNew(); 
newRow["ID"] = 5; 
newRow["Name"] = "five"; 
newRow["Order"] = 4; 
newRow.EndEdit(); 

(정렬이 순서와 이름 열에서 수행되기 때문에) 새로운 행이 DataView 내 마지막되지 않습니다 그 코드 후 _dt 5 개 행이 될 것입니다 . 행을 편집하는 것은 매우 간단합니다 : 당신은 또한 DataView 내에서 행을 찾을 DataView.Find() 또는 DataView.FindRows() 방법을 사용할 수 있습니다

var editedRow = _dv[0]; 
editedRow.BeginEdit(); 
editedRow["Name"] = "Test"; 
editedRow.EndEdit(); 

.

+0

최고! 감사 !!! –

+0

예를 들어 주시겠습니까? 내보기가 표 자체가되고 싶지만 첫 번째 열, 두 번째 열 (OrderBy (A) .ThenBy (B)와 동일) 순으로 정렬되기를 원한다고 가정 해 봅시다. DataView에 대한 쓰기는 원래 테이블에서 자동으로 수행됩니까? –

+0

답변을 업데이트했습니다. 희망이 그 문제에 도움이 될 것입니다. – MarcinJuraszek