سؤال

وأنا أحاول أن تضييق الصفوف التي هي في بلدي 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 على ما يرام بقدر ما أنا على علم، لذلك أنا أتساءل هناك بعض القيود على استخدام الكلمة الأساسية DISTINCT كجزء من SQL RowFilter على ذلك؟ أي شخص لديه أي فكرة؟

هل كانت مفيدة؟

المحلول

للأسف، أنا لا أعتقد أنك يمكن أن تؤدي استعلام فرعي في تعبير عامل التصفية DataView ل. كنت يسمح فقط لاستخدام مجموعة فرعية من SQL في بعض التعبيرات (موثق <لأ href = "http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx" يختلط = " نوفولو noreferrer "> هنا ).

وستحتاج على الارجح لأداء فرعي الخاص بك (SELECT DISTINCT parentID FROM myOtherTable) بشكل منفصل.

يصف هذه المقالة المشكلة والحلول الممكنة .

نصائح أخرى

ولسوء الحظ لا يمكنك أن تفعل ذلك بهذه الطريقة، كما لا يدعم خاصية RowFilter الكلمة متميزة. ستجد هنا لائحة من العبارات التي يمكن أن تؤدي في RowFilter (والذي هو مجرد التعبير DataColumn): <وأ href = "http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression. ASPX "يختلط =" نوفولو "> http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

وDataViews لديهم طريقة ToTable، وعدة الزائدة اتخاذ منطقية لتحديد ما إذا كانت العودة فقط الصفوف متميزة.

وهنا هو واحد طريقة: http://msdn.microsoft.com/en -US / مكتبة / wec2b2e6.aspx

وهنا هو كيف سيكون استخدامه:

وDataTable وnewDataTable = myDataView.ToTable (صحيح، [مجموعة من أسماء الأعمدة كسلاسل])؛

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

والتعليمات البرمجية التالية يتم استخراج القيم / سجلات متميزة من جدول / dataview، وهي (PROD_DESP_TRN) وجود حقل (CONTAINER_NO) وأخيرا، هذا الرمز هو ملء منسدل (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