الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طلب كود ترتيب لجدول في Data Set

بدأه عبد الله الثبيتي في 1 يونيو 2011 · 11 رد · 1,055 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

--------------------------------------------------------------------------------

الأخوة الأفاضل

السلام عليكم

لدي جدول فيDataSet اسمه tab حاولت اعادة ترتيب سجلاته بناءً على الحقل phone الموجود في الجدول وقد استخدمت هذا الكود

Me.DS.Tables("tab").DefaultView.Sort = "phone ASC"

ولكن الكود لم يعطي نتيجة للترتيب المراد

كل ما اريده هو ترتيب البيانات الموجوده فيه دون استخدام DS.Clear واعادة التحميل من جديد

أرجوا افادتي عاجلا ولكم جزيل الشكر

#2

الترتيب يتم داخل الـDataView وليس الـDataTable

فمثلا لو عندنا جدول يحتوى على حقل واحد يسمى ID وفيه القيم 1 , 5 , 2 , 4 , 3 بنفس الترتيب

ثم قمت بعمل ترتيب داخل الـDataView فإنها ستظهر مرتبة بداخله لكنها ستظل بنفس الترتيب فى الجدول

فتجدها فى الكائن DataTable.DefaultView بالشكل 1 , 2 , 3 , 4 , 5

الخلاصة أنه لا يمكن ترتيب بيانات الجدول لكن يمكن أخذ كائن DataView من الجدول وترتيب البيانات بداخله

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3
GHOST2010 كتب:

الترتيب يتم داخل الـDataView وليس الـDataTable

فمثلا لو عندنا جدول يحتوى على حقل واحد يسمى ID وفيه القيم 1 , 5 , 2 , 4 , 3 بنفس الترتيب

ثم قمت بعمل ترتيب داخل الـDataView فإنها ستظهر مرتبة بداخله لكنها ستظل بنفس الترتيب فى الجدول

فتجدها فى الكائن DataTable.DefaultView بالشكل 1 , 2 , 3 , 4 , 5

الخلاصة أنه لا يمكن ترتيب بيانات الجدول لكن يمكن أخذ كائن DataView من الجدول وترتيب البيانات بداخله

اشكر لك التوضيح

إذا أنا مضطر في هذه الحالة أن اقوم بتحويل البيانات الموجودة في الداتا قريد فيو الى جدول جديد وليكن اسمه tab1 فهل من الممكن انشاء جدول جديد في الداتا سيت بنفس بيانات الداتا قريد فيو بمعنى أن الجدول tab تم تكوينه بواسطة جملة الإستعلام

QLstr = "SELECT * FROM tab"

            CON.Open()

            Dim DataAdapter1 As New OleDbDataAdapter(SQLstr, CON)
            DataAdapter1.Fill(DS, "tab")
            CON.Close()

هل يمكن تكوين جدول آخر باسم tab1 على أن يكون كود الانشاء

 SQLstr1= " سجلات DataGridView1 بنفس ترتيبها"

            CON.Open()

            Dim DataAdapter2 As New OleDbDataAdapter(SQLstr1, CON)
        DataAdapter2.Fill(DS, "tab1")
            CON.Close()

أرجو أن يكون سؤالي واضح حسب الشرح لأنني أرغب في الوصول لجدول بنفس بيانات الداتا قريد فيو وبنفس ترتيب سجلاتها

كل الشكر على الاهتمام بالرد حفظكم المولى

تم تعديل هذه المشاركة بواسطة عبد الله الثبيتي في 2 يونيو 2011 في 10:20

#4

أعذرنى لكنى فعلا لم أفهم السؤال

إذا أردت أن ينعكس الترتيب على الجريد فيو فكل ما عليك فعله هو ربط الجريد بالداتا فيو وليس بالجدول

DataGridView1.DataSource = Me.DS.Tables("tab").DefaultView

معذرة ولكن هل يمكنك التوضيح قليلا؟

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#5
GHOST2010 كتب:

أعذرنى لكنى فعلا لم أفهم السؤال

إذا أردت أن ينعكس الترتيب على الجريد فيو فكل ما عليك فعله هو ربط الجريد بالداتا فيو وليس بالجدول

DataGridView1.DataSource = Me.DS.Tables("tab").DefaultView

معذرة ولكن هل يمكنك التوضيح قليلا؟

اشكر لك سعة صدرك

اخي الفاضل كل ما في الأمر أنني أقوم بتصدير البيانات الموجوده في الداتا قريد والتي مصدر بياناتها الجدول tab يتم التصدير الى جدول في الوورد التصدير تمام جدا وكل شي على مايرام

في الحقيقه إن الكود يقوم بتصدير بيانات الجدول tab حسب الترتيب الموجود في في الجدول اصلاً وليس حسب الترتيب الموجود في الداتا قريد فيو

اريد تصدير البيانات حسب ترتيب الداتا قريد فيو

الحل في نظري هو اعادة ترتيب بيانات الجدول tab بناءً على ترتيب البيانات في الداتا قريد فيو ولكنني فهمت من ردك أنه لايمكن التحكم في ترتيب الجدول بعد تعبئته .

الحل الثاني :

انشاء جدول جديد في الداتا سيت ومن ثم تعبئته من الداتا قريد فيو بنفس الترتيب الموجود فيها وبعد ذلك يتم تصدير بيانات الجدول الجديد الى جدول الوورد

هل يمكن انشاء جدول جديد في الداتا سيت وتعبئته بسجلات الداتا قريد فيو فهذا كفيل بحل المشكلة لدي

كل الشكر والتقدير وفقكم الله

تم تعديل هذه المشاركة بواسطة عبد الله الثبيتي في 2 يونيو 2011 في 13:05

#6

فهمت السؤال الآن

إذا كان الترتيب متاح للمستخدم أى أن المستخدم يستطيع تغيير ترتيب البيانات فى الجريد بالضغط على الهيدر الخاص بالعمود فليس لديك إلا الحل الثانى وهو إنشاء جدول جديد بنفس بنية الجدول الأول وعمل حلقة تكرارية على السطور الموجودة فى الجريد ونسخها داخل الجدول الجديد وهذا الجدول هو الذى يتم تصديره إلى الوورد أما إذا كنت أنت من يحدد ترتيب البيانات والمستخدم لا يستطيع تغييره وقت التشغيل فيمكنك تصدير الـDataView بدلا من الـDataTable

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#7
GHOST2010 كتب:

الحل الثانى وهو إنشاء جدول جديد بنفس بنية الجدول الأول وعمل حلقة تكرارية على السطور الموجودة فى الجريد ونسخها داخل الجدول الجديد وهذا الجدول هو الذى يتم تصديره إلى الوورد

الله ينور عليك استاذنا الفاضل نعم هذا الحل ولكن ماهو كود نسخ بيانات الداتا قريد الى جدول جديد في الداتا سيت بفرض أن اسم الداتا قريد هو DataGridView1 وتحتوي على عمودين name و phone

كل التقدير والإحترام جزاك الله خيرا

#8

تفضل جرب هذا الكود

        Dim dt As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If row.DataBoundItem IsNot Nothing Then
                dt.ImportRow(CType(row.DataBoundItem, DataRowView).Row)
            End If
        Next

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#9
GHOST2010 كتب:

تفضل جرب هذا الكود

        Dim dt As DataTable = CType(Me.DataGridView1.DataSource, DataTable).Clone
        For Each row As DataGridViewRow In Me.DataGridView1.Rows
            If row.DataBoundItem IsNot Nothing Then
                dt.ImportRow(CType(row.DataBoundItem, DataRowView).Row)
            End If
        Next

اخي الكريم شاكر لك ومقدر لجهودك

بعد وضع الكود هناك خلل بسيط جدا وهو أنه لايتعرف البرنامج على Row

أنظر الصوره المرفقه

كل الود والتقدير والمعذرة على تعبك معي

post-48311-025553000 1307021675_thumb.pn

المرفقات
row.png
#10

أخى الكريم من فضلك راجع الكود جيدا

هناك جملة For إضافية قمت بكتابتها وهى غير مكتملة وتسبب خطأ

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#11

جرب هذا الكود

SQLstr = "SELECT * FROM tab order by phone ASC"

بمعنى ان تملئ DataTable فى الاصل بالبيانات مرتبة ثم قم بعرضها كما شئت

تم تعديل هذه المشاركة بواسطة elawa3000 في 2 يونيو 2011 في 18:32

#12

اخي العزيز شاكر لك جهودك الجباره معي

تم حل المشكلة باقتناص عنوان العمود والترتيب له ووضعه في متغير حتى يتم بناء جملة sql للجدول tab عند تعبئته

كود تعبئة الجدول tab قبل

 Try
                                CON.Open()
                               Dim DataAdapter1 As New OleDbDataAdapter(SQLstr + SQLstr1 +, CON)
                DataAdapter1.Fill(DS, "tab")
                CON.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

عند الضغط على رأس العمود يتم اقتناص الترتيب

Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
        Dim fltab As String
        Dim ordr As String
        If DataGridView1.SortOrder = 1 Then
            ordr = " "
        Else
            ordr = " DESC"
        End If
        If e.ColumnIndex = 0 Then
            fltab = " ORDER BY name"
        ElseIf e.ColumnIndex = 1 Then
            fltab = " ORDER BY Rank"
        ElseIf e.ColumnIndex = 2 Then
            fltab = " ORDER BY Id"
        ElseIf e.ColumnIndex = 3 Then
            fltab = " ORDER BY Section1"
        ElseIf e.ColumnIndex = 4 Then
            fltab = " ORDER BY Blood"
        ElseIf e.ColumnIndex = 5 Then
            fltab = " ORDER BY phone"
        ElseIf e.ColumnIndex = 6 Then
            fltab = " ORDER BY Alternative"
        ElseIf e.ColumnIndex = 7 Then
            fltab = " ORDER BY ExWork"
        ElseIf e.ColumnIndex = 8 Then
            fltab = " ORDER BY Notes"
        End If
        SQLstr2 = fltab & ordr
    End Sub

فأصبح عملية تعبئة الجدول بالتالي :

DS.Clear()
            Try
                           CON.Open()
                             Dim DataAdapter1 As New OleDbDataAdapter(SQLstr + SQLstr1 + SQLstr2, CON)
                DataAdapter1.Fill(DS, "tab")
                CON.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

فأصبح الجدول مرتب حسب مانريد

اكرر شكري لك ودمت بخير مع تمنياتي لك بالتوفيق

مواضيع مشابهة