2011-02-06 3 views
0

나는 csv 파일에서 만든 19 개의 열이있는 Datatable (invTable)을 가지고 있습니다. 해당 Datatable에서 나는 column2 (이름) 값을 사용하여 콤보 상자를 채 웁니다.Filter Combobox 두 번째 열의 값을 기반으로 한 항목

내가해야 할 일은 column9 (type)의 값이 사전 설정 값과 일치하는 경우에만 Combobox에 표시되는 column2 (name)의 항목을 필터링하는 것입니다. 즉, column9 (type)의 값이 15 인 경우에만.

또한 Combobox에서 선택한 항목을 기반으로 나머지 열의 값으로 작업 할 수 있어야합니다. SelectedCol1-SelectedCol19와 같은 변수에 할당하여 프로그램 전체의 다른 계산에 사용할 수 있도록합니다.

편집 : 다음 코드를 사용하여 내 필요에 맞는 것을 찾을 수있었습니다.

var query = invTable.AsEnumerable().Where(c => c.Field<String>("Type").Equals("15")); 
combo1.DataSource = query.AsDataView(); 
combo1.DisplayMember = "name"; 
combo1.ValueMember = "Index"; 
+0

나는 (만약 당신이 이미 그것을 해본 적이 없다면) 방법으로 이것을 다시 고려하고있다. 메소드에는 필드 이름 (예제의 "type")과 값 (이 예제의 "15")이라는 두 개의 매개 변수가 있습니다. –

답변

0

여기에 완벽한 해결책을 제공하지는 않겠지 만 올바른 방향으로 보내 주길 바랍니다.

은 기본적으로 당신은 그래서 요 필터링 할 때마다, 당신은 그것을 필터 기준을 지정 DataView를를 만듭니다. 원본 데이터 셋의 "필터링"보기 인 (A DataView를 사용해야합니다.

http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

위 링크는 당신에게 작업 솔루션을 제공해야합니다. 그들은 또한 예제를 가지고 시대의 바닥을 향해.

당신이 당신의 DataView를 당신이 그것을 드롭을 채우는 행의 이상, 당신은 반복 할 필요가있는 방법을 필터링 일단 문제의 원인 :

편집 된은 OP의 간단한 단계를 제공합니다.

간단한 시작. ComboBox를 채우는 방법을 알고 있다고 가정합니다.

1 단계 : 데이터 집합 2 단계에서 데이터 가져 오기하십시오 DataView를 3 단계를 사용하여 데이터 집합을 필터링 :

DataSet dt = GetInvDataTable(); 
DataView dv = new DataView(dt, "type = 15", null, 
     DataViewRowState.CurrentRows); 

:

의사 코드 (대신 데이터 집합에) DataView를을 사용하여 콤보 상자 채우기 이제 처음에 DataSet을 사용하는 것처럼 DataView (변수 dv)를 사용하여 CombobBox를 채울 수 있습니다.

BindingSource를 사용하는 경우 BindingSource의 DataSource를 DataView (이 경우에는 dv)로 설정하기 만하면됩니다.

사용중인 .NET 버전은 언급하지 않지만 3.5 또는 4를 사용하는 경우 linq을 사용하여 DataSet을 필터링 할 수도 있습니다. DataSetExtensions 어셈블리를 프로젝트에 대한 참조로 추가해야합니다.

+0

@ Shiv : dupe 대답 –

+0

@ 존, 무슨 일이 있었는지 모르겠지만 ... 이전 하나를 삭제했습니다 –

+0

지시에 감사드립니다, 나는 그것을 체크 아웃합니다. 내 주요 문제는 너무 간단하다는 것인가?나는 힘든 시간을 어디에 넣을 것 같은 것들을 쥐고있다; 속눈썹을 타지 않고 상호 작용하는 100 가지 변수를 가진 복잡한 주식 시장 유형 시스템을 코딩 할 수 있습니다./실제로 코딩을 디버깅하는 것이 훨씬 낫습니다. – Jason

관련 문제