2009-03-02 3 views
4

Я пытаюсь сузить строки, которые находятся в моем DataView, на основе отношения с другой таблицей, и используемый мной RowFilter выглядит следующим образом:SELECT DISTINCT в RowFilter DataView

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

и таблица «MYTABLE» «myOther» связаны через myTable.ID и myOtherTable.parentID, и поэтому идея состоит в том, что DataView должен содержать только строки из «MyTable», которые имеют соответствующие дочерние строки в «myOtherTable ».

К сожалению, я получаю эту ошибку;

Syntax error: Missing operand after 'DISTINCT' operator.

SQL, прекрасно, насколько я знаю, так что я интересно, есть некоторые ограничения по использованию DISTINCT ключевого слова как часть SQL RowFilter в? У кого-нибудь есть идея?

ответ

5

К сожалению, я не думаю, что вы можете выполнить подзапрос в выражении фильтра DataView. Вы можете использовать подмножество SQL в некоторых выражениях (задокументировано here).

Возможно, вам потребуется выполнить свой подзапрос (SELECT DISTINCT parentID FROM myOtherTable) отдельно.

This article описывает проблему и возможное решение.

+0

я решил обойти эту проблему, создав свой собственный отдельный список parentIDs, а затем просто передавая этот список в «идентификатор (...)» п (который, к счастью, поддерживается , в отличие от DISTINCT или GROUP BY). Cheers –

1

Попытайтесь просто оставить «DISTINCT». В этом случае результаты должны быть одинаковыми с или без. Устранение неполадок оттуда.

2

This question покажет вам, как создать отдельный набор (фактически новый datatable) с помощью DataView на таблице. Этот подход немного отличается от того, что вы делаете выше.

3

К сожалению, вы не можете сделать это таким образом, поскольку свойство RowFilter не поддерживает отдельное ключевое слово. Ниже приведен список выражений, которые вы можете выполнять в 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

В будущем попробуйте добавить что-то большее, чем просто код, независимо от его значения. –

Смежные вопросы