質問

別のテーブルとの関係に基づいて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"に対応する子行があります。

残念ながら、このエラーが発生しています;

  

構文エラー:後にオペランドがありません   「DISTINCT」演算子。

SQLは私が知っている限りでは問題ないので、RowFilterのSQLの一部としてDISTINCTキーワードを使用する際に何らかの制限があるのだろうか?誰でもアイデアはありますか?

役に立ちましたか?

解決

残念ながら、DataViewのフィルター式でサブクエリを実行できるとは思いません。一部の式ではSQLのサブセットのみを使用できます(こちら)。

おそらく、サブクエリ( SELECT DISTINCT parentID FROM myOtherTable )を個別に実行する必要があります。

この記事では、問題と可能な解決策について説明しています。 。

他のヒント

残念ながら、RowFilterプロパティは個別のキーワードをサポートしていないため、そのようにすることはできません。 RowFilter(単なるデータ列式)で実行できる式のリストは次のとおりです。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViewsにはToTableメソッドがあり、いくつかのオーバーロードはブール値を使用して、個別の行のみを返すかどうかを指定します。

1つの方法を次に示します。 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";

次のコードは、個別の値/レコードをテーブル/データビューから抽出しています。つまり、フィールド(CONTAINER_NO)を持つ(PROD_DESP_TRN) 最後に、このコードはコンボボックス(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