Question

J'essaie de limiter les lignes qui se trouvent dans mon DataView en fonction d'une relation avec une autre table. Le filtre RowFilter que j'utilise est le suivant:

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

" maTable " et "myOther". les tables sont liées via myTable.ID et myOtherTable.parentID. L’idée est donc que le DataView ne doit contenir que des lignes de "" maTable". qui ont des lignes enfants correspondantes dans "myOtherTable".

Malheureusement, je reçois cette erreur;

  

Erreur de syntaxe: Opérande manquant après   Opérateur 'DISTINCT'.

Autant que je sache, le code SQL est correct. Je me demande donc s'il existe des limites à l'utilisation du mot clé DISTINCT dans le cadre du code SQL de RowFilter. Quelqu'un a une idée?

Était-ce utile?

La solution

Malheureusement, je ne pense pas que vous puissiez exécuter une sous-requête dans l'expression de filtre d'un DataView. Vous ne pouvez utiliser qu'un sous-ensemble de SQL dans certaines expressions (documenté ici ).

Vous devrez probablement exécuter votre sous-requête ( SELECT DISTINCT parentID FROM myOtherTable ) séparément.

Cet article décrit le problème et une solution possible. .

Autres conseils

Malheureusement, vous ne pouvez pas le faire de cette façon, car la propriété RowFilter ne prend pas en charge le mot clé distinct. Voici la liste des expressions que vous pouvez exécuter dans un RowFilter (qui est simplement une expression DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews a une méthode ToTable et plusieurs surcharges prennent un booléen pour spécifier s'il faut renvoyer uniquement les lignes distinctes.

Voici une méthode: http://msdn.microsoft.com/en -us / library / wec2b2e6.aspx

Voici comment vous l'utiliseriez:

DataTable newDataTable = myDataView.ToTable (true, [tableau des noms de colonne sous forme de chaînes]);

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

le code suivant extrait des valeurs / enregistrements distincts d'une table / vue, à savoir (PROD_DESP_TRN) ayant le champ (CONTAINER_NO) Enfin, ce code remplit une liste déroulante (cmbContainerNo) avec des valeurs / enregistrements uniques

Déclaration de niveau de formulaire:

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

Essayez de ne pas insérer le "DISTINCT". Dans ce cas, les résultats devraient être les mêmes avec ou sans. Résoudre les problèmes à partir de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top