ما هي أفضل طريقة لفرز مربع التحرير والسرد المرتبط بالبيانات؟

StackOverflow https://stackoverflow.com/questions/29731

  •  09-06-2019
  •  | 
  •  

سؤال

لقد أجريت القليل من البحث في هذا الأمر ويبدو أن الطريقة الوحيدة لفرز مربع التحرير والسرد المرتبط بالبيانات هي فرز مصدر البيانات نفسه (DataTable في DataSet في هذه الحالة).

إذا كان الأمر كذلك، يصبح السؤال ما هي أفضل طريقة لفرز DataTable؟

يتم تعيين روابط مربع التحرير والسرد في تهيئة المصمم باستخدام

myCombo.DataSource = this.typedDataSet;
myCombo.DataMember = "Table1";
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";

لقد حاولت الإعداد

this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
ولكن هذا لا يشكل أي فرق، لقد حاولت تعيين هذا في مُنشئ التحكم، قبل وبعد استدعاء typedDataSet.Merge.

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

المحلول

إذا كنت تستخدم DataTable، فيمكنك استخدام (DataTable.DefaultView) عرض البيانات ملكية.لمزيد من المرونة يمكنك استخدام BindingSource عنصر.سيكون BindingSource هو مصدر البيانات لمربع التحرير والسرد الخاص بك.ثم يمكنك تغيير مصدر البيانات الخاص بك من DataTable إلى List دون تغيير مصدر البيانات الخاص بمربع التحرير والسرد.

يخدم مكون Bindingsource العديد من الأغراض.أولاً ، يقوم بتبسيط عناصر تحكم الربط في نموذج للبيانات من خلال توفير إدارة العملة وإخطار التغيير والخدمات الأخرى بين عناصر التحكم في نماذج Windows ومصادر البيانات.

نصائح أخرى

يمكنك في الواقع فرز العرض الافتراضي على جدول البيانات:

myDataTable.DefaultView.Sort = "Field1, Field2 DESC";

سيؤدي ذلك إلى فرز أي صفوف تستردها مباشرة من DataTable.

تأكد من ربط DefaultView بمصدر بيانات عناصر التحكم، بعد تعيين خاصية الفرز، وليس الجدول:

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";

جوش سميث لديه مشاركة مدونة يجيب على هذا السؤال، ويفعل كل شيء في XAML.

هل يجب أن تكون البيانات في DataTable؟سيكون استخدام SortedList وربطها بمربع التحرير والسرد طريقة أبسط.

إذا كنت بحاجة إلى استخدام DataTable، فيمكنك استخدام الأسلوب Select لاسترداد DataView وتمرير معلمة الفرز.

DataView dv = myDataTable.Select("filter expression", "sort");

إن أبسط طريقة لفرز ComboBox هي استخدام ComboBox.Sorted ملكية.ومع ذلك، لن ينجح ذلك إذا كنت تستخدم ربط البيانات.في هذه الحالة سيكون عليك فرز مصدر البيانات نفسه.

يمكنك استخدام إما أ SortedList أو SortedDictionary (كلاهما فرز حسب المفتاح)، أو أ عرض البيانات.

يحتوي DataView على نوع خاصية تقبل تعبير الفرز (سلسلة) على سبيل المثال:

view.Sort = "State, ZipCode DESC";

في المثال أعلاه، يعد كل من State وZipCode عبارة عن أعمدة في DataTable تُستخدم لإنشاء DataView.

أدرك أنك اخترت بالفعل إجابتك على هذا السؤال، لكنني كنت أقترح وضع DataView في النموذج الخاص بك، وربطه بـ DataSet/DataTable، وتعيين النوع على طريقة العرض في المصمم.يمكنك بعد ذلك ربط مربع التحرير والسرد الخاص بك بـ DataView، بدلاً من DataSet/DataTable.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top