Domanda

Sto cercando di restringere le righe che si trovano nel mio DataView in base a una relazione con un'altra tabella, e il RowFilter che sto usando è il seguente;

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

" myTable " e "myAltro" la tabella è correlata tramite myTable.ID e myOtherTable.parentID, quindi l'idea è che DataView dovrebbe contenere solo righe da " myTable " che hanno le righe figlio corrispondenti in " myOtherTable " ;.

Sfortunatamente, visualizzo questo errore;

  

Errore di sintassi: dopo l'operando mancante   Operatore "DISTINCT".

L'SQL va bene per quanto ne so, quindi mi chiedo ci sono alcune limitazioni nell'uso della parola chiave DISTINCT come parte dell'SQL di RowFilter? Qualcuno ha qualche idea?

È stato utile?

Soluzione

Sfortunatamente, non penso che tu possa eseguire una sottoquery nell'espressione di filtro di DataView. È consentito utilizzare solo un sottoinsieme di SQL in alcune espressioni (documentato qui ).

Probabilmente dovrai eseguire la tua sottoquery ( SELECT DISTINCT parentID DA myOtherTable ) separatamente.

Questo articolo descrive il problema e una possibile soluzione .

Altri suggerimenti

Sfortunatamente non puoi farlo in questo modo, poiché la proprietà RowFilter non supporta la parola chiave distinta. Ecco l'elenco delle espressioni che puoi eseguire in un RowFilter (che è solo un'espressione DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews ha un metodo ToTable e diversi overload richiedono un valore booleano per specificare se restituire solo le righe distinte.

Ecco un metodo: http://msdn.microsoft.com/en -us / library / wec2b2e6.aspx

Ecco come lo useresti:

DataTable newDataTable = myDataView.ToTable (true, [array di nomi di colonne come stringhe]);

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

il seguente codice estrae valori / record distinti da una tabella / vista dati, ovvero (PROD_DESP_TRN) con campo (CONTAINER_NO) Infine, questo codice riempie una casella combinata (cmbContainerNo) con valori / record univoci

Dichiarazione a livello di modulo:

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

Prova a tralasciare " DISTINCT " ;. In questo caso, i risultati dovrebbero essere gli stessi con o senza. Risolvi da lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top