2009-03-02 3 views
4

다른 테이블과의 관계를 기반으로 DataView에있는 행의 범위를 좁히려 고합니다. 사용중인 RowFilter는 다음과 같습니다.DataView의 RowFilter에서 DISTINCT를 선택하십시오.

dv = new DataView(myDS.myTable, 
       "id IN (SELECT DISTINCT parentID FROM myOtherTable)", 
       "name asc", 
       DataViewRowState.CurrentRows); 

"myTable에"와 "myOther"테이블 myTable.ID 및 myOtherTable.parentID를 통해 관련, 그래서 아이디어는 DataView를 만 myOtherTable "에 해당하는 자식 행이"myTable에 "행을 포함해야한다는 것이다있다 ".

불행히도이 오류가 발생합니다.

Syntax error: Missing operand after 'DISTINCT' operator.

는 SQL은 내가 아는 괜찮습니다, 그래서의 RowFilter의 SQL의 일부로 DISTINCT 키워드를 사용하여 몇 가지 제한이 궁금하네요? 누구든지 어떤 생각을 가지고 있습니까?

답변

5

불행히도 DataView의 필터 식에서 하위 쿼리를 수행 할 수 있다고 생각하지 않습니다. 일부 표현식에서만 SQL의 서브 세트를 사용할 수 있습니다 (here 설명).

아마도 하위 쿼리 (SELECT DISTINCT parentID FROM myOtherTable)를 별도로 수행해야 할 것입니다.

This article은 문제점과 가능한 해결책을 설명합니다.

+0

난 그냥 감사하게 지원하는 (에 "아이디 IN (...)"절에 그 목록을 통과 한 후 parentIDs 내 자신의 별개의 목록을 작성하고하여 문제를 해결하기로 결정 , DISTINCT 또는 GROUP BY와 달리). 건배 –

1

"DISTINCT"를 제외하십시오. 이 경우 결과는 동일하거나 부합해야합니다. 거기서 문제를 해결하십시오.

2

This question은 테이블에서 DataView를 사용하여 고유 한 집합 (실제로는 새로운 데이터 테이블)을 만드는 방법을 보여줍니다. 접근법은 위에서 수행하는 것과 약간 다릅니다.

3

RowFilter 속성은 distinct 키워드를 지원하지 않으므로 불행히도 그렇게 할 수 없습니다. 다음은 RowFilter (DataColumn 표현식)에서 수행 할 수있는 식의 목록입니다. http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews에는 ToTable 메서드가 있으며 여러 오버로드는 고유 한 행만 반환할지 여부를 지정하기 위해 부울을 사용합니다. 여기 http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

는 그것을 사용할 것 인 방법 : 여기서

한 방법

DataTable을 newDataTable = myDataView.ToTable (참, [문자열로 열 이름의 배열]);

2

다음 코드 테이블/DataView를, 즉, (PROD_DESP_TRN)를 갖는 필드 (CONTAINER_NO) 마지막으로,이 코드는 고유 한 값/기록

양식 콤보 (cmbContainerNo)를 채우는에서 고유 값/레코드를 추출한다 레벨 선언 :

Dim dsLocal As DataSet 
Dim dvm As DataViewManager 
Private Sub FillcomboContainer() 

    Try 
     Dim dv As DataView = New DataView 

     cmbContainerNo.DataSource = Nothing 
     dv = dvm.CreateDataView(dsLocal.Tables("PROD_DESP_TRN")) 
     dv.Sort = "CONTAINER_NO" 

     cmbContainerNo.DataSource = dv.ToTable(True, "CONTAINER_NO") 
     cmbContainerNo.DisplayMember = "CONTAINER_NO" 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
    End Try 
End Sub 
1
DataView dvBindAssignedByDropDown = new DataView(); 

DataTable dtBindAssignedByDropDown = new DataTable(); 

dvBindAssignedByDropDown = ds.Tables[0].DefaultView; 


string[] strColnames=new string[2]; 

strColnames[0] = "RedNames"; 

strColnames[1] = "RedValues"; 

dtBindAssignedByDropDown = dvBindAssignedByDropDown.ToTable(true, strColnames); 

ddlAssignedby.DataTextField = "RedNamesNames"; 
ddlAssignedby.DataValueField = "RedNames"; 
ddlAssignedby.DataSource = dtBindAssignedByDropDown; 
ddlAssignedby.DataBind(); 
ddlAssignedby.Items.Insert(0, "Assigned By"); 
ddlAssignedby.Items[0].Value = "0"; 
+3

미래에 코드의 가치가 무엇이든 그 이상을 추가하십시오. –

관련 문제