SELECT DISTINCT في RowFilter DataView ل
سؤال
وأنا أحاول أن تضييق الصفوف التي هي في بلدي 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". في هذه الحالة، يجب أن تكون النتائج هي نفسها مع أو بدون. استكشاف من هناك.