بمساعدة DataView، يمكننا إنشاء طرق عرض مختلفة للبيانات المخزنة في DataTable. على سبيل المثال، من خلال DataView، يمكنك استخدام ترتيبات فرز مختلفة لعرض البيانات في DataTable، أو تصفية البيانات في DataTable بناءً على حالة عمود البيانات أو تعبيرات التصفية. الشيء المهم هو أنه عندما نحتاج إلى إنشاء طرق عرض مختلفة للبيانات الموجودة في DataTable وربط هذه البيانات بعناصر التحكم في النموذج، نحتاج إلى استخدام DataView لإكمالها.
يوفر DataView طريقة عرض بيانات ديناميكية، أي أن محتواه وترتيب الفرز والأعضاء سيعكسون أي تغييرات في DataTable المصدر. من الواضح أن DataView يختلف كثيرًا عن الأسلوب DataTable.Select، حيث سيُرجع الأسلوب Select صفيفًا من كائنات DataRow من جدول البيانات استنادًا إلى تعبير عامل تصفية معين أو ترتيب الفرز، ويكون أعضاؤه وترتيب الفرز ثابتين. نظرًا للطبيعة التفاعلية الديناميكية لـ DataView، فهي مناسبة جدًا للاستخدام في تطبيقات ربط البيانات.
يوفر لك DataView عرضًا ديناميكيًا لمجموعة بيانات واحدة. يمكنك تطبيق ترتيبات فرز وشروط تصفية مختلفة على مجموعة البيانات. وهذا يشبه إلى حد ما طريقة العرض التي توفرها قاعدة بيانات SQL Server. ومع ذلك، لا يزال هناك اختلاف كبير بين DataView وعرض قاعدة البيانات، لأنه لا يمكن استخدام DataView كجدول بيانات، ولا يمكنه توفير طريقة عرض لتوصيل جدول البيانات. بالإضافة إلى ذلك، لا يمكنك فقط عدم استبعاد الحقول في جدول البيانات المصدر، بل لا يمكنك أيضًا إضافة حقول إضافية غير موجودة في جدول البيانات المصدر (على سبيل المثال: حقول التعبير).
يمكنك إنشاء DataView بطريقتين. الطريقة الأولى هي استخدام مُنشئ DataView، والطريقة الثانية هي إنشاء مرجع إلى خاصية DefaultView الخاصة بـ DataTable. ستستكشف هذه المقالة بالتفصيل كيفية استخدام هاتين الطريقتين لإنشاء DataView.
باستخدام منشئ DataView
يوفر مُنشئ DataView ثلاثة إصدارات متعددة التحميل كما هو موضح في الجدول أدناه.
إصدار متعدد التحميل من مُنشئ DataView
عرض البيانات ()
DataView (جدول ByVal كـ DataTable)
DataView(جدول ByVal كـ DataTable، _
ByVal RowFilter كسلسلة، _
ByVal فرز كسلسلة، _
ByVal RowState كـ DataViewRowState)
يقوم الإصدار الأول من مُنشئ DataView بتهيئة مثيل جديد لفئة DataView دون أية معلمات. يرجى ملاحظة أنه إذا كنت تستخدم هذا الإصدار لإنشاء DataView، فيجب عليك أولاً تعيين خاصية الجدول بعد إنشاء كائن DataView لتحديد مصدره DataTable، وبعد ذلك يمكنك الاستمرار في تعيين خصائص أخرى (RowFilter، Sort...etc.) .
يوضح رمز البرنامج التالي كيفية استخدام الإصدار الأول من مُنشئ DataView لإنشاء كائن DataView لتصفية وفرز أعمدة البيانات الخاصة بجدول بيانات "Zhang Limin Studio" في مجموعة البيانات، وربط عنصر تحكم DataGridView بهذا عرض البيانات. وجدنا أن عنصر تحكم DataGrid سيعرض النساء فقط، وسيتم ترتيب البيانات حسب ترتيب حدود الأسماء من الأكثر إلى الأقل. وفيما يلي رمز البرنامج لهذا المثال:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio، "استوديو Zhang Limin")
"إنشاء كائن DataView."
Dim dv As DataView = New DataView
' نظرًا لاستخدام مُنشئ DataView بدون أي معلمات لإنشاء كائن DataView،
لذلك، يجب تعيين خاصية الجدول أولاً لتحديد DataTable المصدر الخاص بها
dv.Table = Ds Zhang Limin Studio.
قم بتعيين ترتيب الفرز بحيث يتم ترتيب حدود الاسم من الأكثر إلى الأقل.
dv.Sort = "NameDESC"
' اضبط شروط التصفية لعرض النساء فقط
dv.RowFilter = "Gender = 'Female'"
' ربط عنصر تحكم DataGridView بـ DataView
DataGridView1.DataSource = dv
يمثل الإصدار الثاني من مُنشئ DataView استخدام DataTable المحدد لتهيئة مثيل جديد لفئة DataView.
يوضح رمز البرنامج التالي كيفية استخدام الإصدار الثاني من مُنشئ DataView لإنشاء كائن DataView لتصفية وفرز أعمدة البيانات الخاصة بجدول بيانات "Zhang Limin Studio" في مجموعة البيانات، وربط عنصر التحكم DataGridView بهذا عرض البيانات . وجدنا أن عنصر التحكم DataGridView سيعرض فقط بيانات الموظف الخاص بـ "قسم المعلومات"، وسيتم ترتيب البيانات من الأعلى إلى الأقل حسب الراتب الحالي:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' إنشاء كائن DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'قم بتعيين ترتيب الفرز للفرز من الأعلى إلى الأدنى بناءً على الراتب الحالي
dv.Sort = "Current Salary DESC"
'ضبط شروط التصفية لعرض بيانات الموظف فقط في "قسم المعلومات"
dv.RowFilter = "Department = 'Information Department'"
' ربط عنصر تحكم DataGridView بـ DataView
Me.DataGridView1.DataSource = dv
يمثل الإصدار الثالث من مُنشئ DataView تهيئة مثيل جديد لفئة DataView باستخدام DataTable وRowFilter وSort وDataViewRowState المحدد.
يوضح رمز البرنامج التالي كيفية استخدام الإصدار الثالث من مُنشئ DataView لإنشاء كائن DataView لتصفية وفرز أعمدة البيانات الخاصة بجدول بيانات "Zhang Limin Studio" في مجموعة البيانات، وربط عنصر تحكم DataGridView بهذا عرض البيانات . لقد وجدنا أن عنصر التحكم DataGridView سيعرض فقط بيانات الموظف الذي يزيد راتبه الحالي عن 49000 يوان، وسيتم ترتيب البيانات من الأعلى إلى الأدنى وفقًا للراتب الحالي:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' إنشاء كائن DataView
Dim dv As DataView = New DataView( _
استوديو دي إس تشانغ ليمين، _.
"الراتب الحالي > 49000"، _
"الراتب الحالي DESC"، _
DataViewRowState.CurrentRows)
' ربط عنصر التحكم DataGridView بـ DataView
Me.DataGridView1.DataSource = dv
أود أن أذكر الجميع أنه عند إنشاء DataView، وعند تعديل أي من خصائص Sort أو RowFilter أو RowStateFilter، سيتم إعادة إنشاء فهرس DataView. وهذا يعني أنه إذا كنت ترغب في الاستمتاع بأفضل أداء، فيجب عليك تحديد ترتيب الفرز أو معايير التصفية مباشرة في المُنشئ عند إنشاء DataView. إذا لم تقم بتحديد ترتيب الفرز أو شروط التصفية في المنشئ بشكل مباشر عند إنشاء DataView، ولكن بدلاً من ذلك قمت بتعيين خصائص Sort أو RowFilter أو RowStateFilter لكائن DataView بعد إنشائه، فسيتم إعادة إنشاء فهرس DataView سيتم إنشاء الفهرس مرتين على الأقل.
استخدام الخاصية DefaultView لـ DataTable
تقوم الخاصية DefaultView الخاصة بـ DataTable بإرجاع كائن DataView الذي يستخدم DataTable كجدول البيانات المصدر، مما يسمح لك بفرز أعمدة البيانات وتصفيتها والبحث فيها في DataTable. إذا كان DataView الذي تقوم بإنشائه يريد عرض كافة أعمدة البيانات في DataTable وترتيبها بترتيب طبيعي، فإن استخدام خاصية DefaultView الخاصة بـ DataTable سيكون طريقة مباشرة ومريحة للغاية لإنشاء DataView.
بالنسبة للبرنامج الذي تظهر شاشة تنفيذه في الشكل 1، فإنه يستخدم خاصية DefaultView الخاصة بـ DataTable لإنشاء DataView بحيث يمكن عرض كافة أعمدة البيانات الخاصة بجدول البيانات المصدر في عنصر تحكم DataGrid في البداية، ويسمح للمستخدم لتمرير DataView أثناء مرحلة التنفيذ لتصفية البيانات ديناميكيًا. رمز البرنامج مدرج أدناه:
'إعلان مستوى الفئة لكائن DataView
فيديو خاص كـ DataView
Private Sub DemoForm5_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) يتعامل مع MyBase.Load
fillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' إنشاء DataView
dv = Ds Zhang Limin Studio. Zhang Limin Studio.DefaultView
' عرض عدد أعمدة البيانات في DataView
txtRowCount.Text = dv.Count.ToString
' ربط عنصر تحكم DataGridView بـ DataView
Me.DataGridView1.DataSource = dv
نهاية فرعية
خاصة Sub fillComboBoxDepartment()
'إنشاء كائن أمر بيانات (أي كائن SqlCommand)
خافت foxCMD كأمر SqlCommand جديد
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "اختر القسم المميز من dbo.Zhang Limin Studio"
'افتح الاتصال
SqlConnection1.Open()
استخدام myReader كـ SqlDataReader = foxCMD.ExecuteReader()
إذا كان myReader.HasRows ثم
بينما myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
نهاية بينما
نهاية إذا
إنهاء الاستخدام
ComboBoxDepartment.SelectedIndex = 0
End Sub
Private Sub btnFilter_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) يتعامل مع btnFilter.Click
dv.RowFilter = "القسم= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'عرض عدد أعمدة البيانات في DataView
txtRowCount.Text = dv.Count.ToString
النهاية الفرعية
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html