Pergunta

Eu estou tentando diminuir as linhas que estão no meu DataView com base em uma relação com outra tabela, eo RowFilter que estou usando é a seguinte:

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

"myTable" e mesa "myOther" estão relacionados via myTable.ID e myOtherTable.parentID, e por isso a ideia é que o DataView deve conter apenas linhas de "myTable", que tem linhas filho correspondente no "myOtherTable".

Infelizmente, eu estou recebendo este erro;

Erro de sintaxe: Faltando operando depois operador 'DISTINCT'.

O SQL é bom, tanto quanto eu estou ciente, por isso estou perguntando se existe alguma limitação sobre o uso da palavra-chave DISTINCT como parte do SQL da RowFilter? Alguém tem alguma idéia?

Foi útil?

Solução

Infelizmente, eu não acho que você pode executar uma subconsulta na expressão de filtro de um DataView. Você só está autorizado a usar um subconjunto de SQL em algumas expressões (documentado aqui ).

Você provavelmente vai precisar para realizar seu subconsulta (SELECT DISTINCT parentID FROM myOtherTable) separadamente.

Este artigo descreve o problema e uma solução possível .

Outras dicas

Infelizmente você não pode fazê-lo dessa forma, como a propriedade RowFilter não suporta a palavra-chave distinta. Aqui está a lista de expressões que podem ser executadas em um RowFilter (que é apenas uma expressão de DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews ter um método de Totable, e várias sobrecargas tomar um booleano para especificar se a retornar somente as linhas distintas.

Aqui está um método: http://msdn.microsoft.com/en -us / library / wec2b2e6.aspx

Aqui está como você iria utilizá-lo:

= DataTable newDataTable myDataView.ToTable (verdade, [variedade de nomes de coluna como cordas]);

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

o código seguinte é extrair valores / registos distintas a partir de uma mesa / dataview, nomeadamente (PROD_DESP_TRN) tendo campo (CONTAINER_NO) Finalmente, este código está preenchendo um combobox (cmbContainerNo) com valores únicos / registros

Declaração Nível Forma:

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

Tente apenas deixando de fora o "DISTINCT". Neste caso, os resultados devem ser o mesmo com ou sem. Solucionar problemas de lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top