Вопрос

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

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».

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

Ошибка синтаксиса:Отсутствует операнд после «Отличного» оператора.

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

Это было полезно?

Решение

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

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

Эта статья описывает проблему и возможное решение.

Другие советы

К сожалению, вы не можете сделать это таким образом, поскольку свойство RowFilter не поддерживает ключевое словоdependent.Вот список выражений, которые вы можете выполнить в 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( true, [массив имен столбцов в виде строк]);

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";

Следующий код извлекает различные значения/записи из таблицы/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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top