Frage

Ich versuche, die Reihen zu verengen, die basierend auf einer Beziehung mit einem anderen Tisch in meinem Dataview sind, und die RowFilter Ich verwende ist wie folgt:

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

„myTable“ und „myOther“ Tabelle werden über myTable.ID und myOtherTable.parentID, bezogen und so die Idee ist, dass die Dataview nur die Zeilen von „myTable“ enthalten sollte, die entsprechenden untergeordneten Zeilen in „myOtherTable“ haben.

Leider erhalte ich diesen Fehler;

  

Syntaxfehler: Fehlende Operand nach   'DISTINCT' Betreiber.

Die SQL ist in Ordnung, soweit mir bekannt ist, so frage ich mich gibt es eine Beschränkung das Schlüsselwort DISTINCT als Teil RowFilter SQL über die Verwendung? Wer noch keine Idee?

War es hilfreich?

Lösung

Leider, ich glaube nicht, dass Sie eine Unterabfrage in einem Dataview des Filterausdruck ausführen können. Sie sind nur eine Teilmenge von SQL in einigen Ausdrücken (dokumentiert hier ).

Sie werden wahrscheinlich benötigen, um Ihre Unterabfrage (SELECT DISTINCT parentID FROM myOtherTable) separat durchzuführen.

Dieser Artikel beschreibt das Problem und eine mögliche Lösung .

Andere Tipps

Leider kann man nicht, dass es so tun, als die RowFilter Eigenschaft nicht das Schlüsselwort distinct unterstützt. Hier ist die Liste der Ausdrücke, die Sie in einem RowFilter ausführen können (das ist nur ein Datacolumn Ausdruck ist): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

Dataviews hat eine Totable Methode und mehr Überlastungen nehmen einen boolean angeben, ob nur die unterschiedlichen Zeilen zurück.

Hier ist eine Methode: http://msdn.microsoft.com/en -US / library / wec2b2e6.aspx

Hier ist, wie Sie es verwenden würde:

Table newDataTable = myDataView.ToTable (true, [Array von Spaltennamen als Strings]);

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

der folgende Code Extrahieren unterschiedliche Werte / Datensätze aus einer Tabelle / Dataview, nämlich (PROD_DESP_TRN) mit Feld (CONTAINER_NO) Schließlich wird dieser Code eine Combobox (cmbContainerNo) mit eindeutigen Werten / Aufzeichnungen Füllung

Formularebene Deklaration:

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

Versuchen Sie, nur die „distinct“ Weglassen. In diesem Fall sollten die Ergebnisse gleich sein mit oder ohne. Beheben von dort aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top