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

عمل filters ل datagrid

مغلق
بدأه ابو السموأل في 30 مارس 2005 · 16 رد · 1,688 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله ويركاته

اخواني اريد ان اعمل filters ل datagrid وساضرب مثال للتوضيح ان شاء الله

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

وعندي 3 control من نوع dropdownlist اريد ان اعملها كفلاتر لهذا ال datagrid

مثلا

اضع في dropdownlist1 اسماء الكليات الموجودة ولنفرض وجود كليتان على سبيل المثال الهندسة و تكنولوجيا المعلومات

المطلوب كاتالي عندما اختار كلية الهندسة يتم عرض معلومات المسجلين من كلية الهندسة بدون تكنولوجيا المعلومات وهكذا

طبعا المسئلة سهلة اذا كان في dropdownlist واحد بس المشكلة انو في ثلاث dropdownlist مش عارف هل اعمل ثلاث

sqldataadapter لكل filter واحدة ام ان هناك طريقة اخرى انا مش عارف بصراحة :s :s :s

تم تعديل هذه المشاركة بواسطة ابو السموأل في 30 مارس 2005 في 16:53

#2

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

طبعا تسند الدالة لخاصية ال DataSource للأداة في منطقة ال HTML و سوف تعود لك بالبيانات عند تحميل الصفحة.

You can fly while you can touch the sky

#3

ايضا يمكنك ذلك من خلال ال DataTable نفسو، بتمرير الشرط الى Select method

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#4

اخي الكريم

لو كنت مكانك لاتبعت الخطوات التالية:

اولا قم بأخذ كل القيم من قاعدة البيانات ثم خزنها في الكاش و احفظها في داتا سيت ثم احفظ الـ DefaultView للـداتا سيت في Dataview بحيث انه لو انك تقوم باخذ كل المعلومات مرة ثانية .. فانك لن تأخذها من قاعدة البيانات ... لكنك سوف تأخذه من الكاش كالتالي:

-- هذه الدالة هي التي تقوم بتعبئة الداتاسيت
-- هذه دالة عامة و تستخدم غالبا مع ما يسمى بتقنية الـ Data Layer /Business Layer
Public Function DSFromSQL(ByVal SQL As String) As DataSet
        Dim oCmd As IDbCommand
         Dim yourConnection As SqlConnection
        Dim dadStudents As SqlDataAdapter

-- قم بتوصيل البيانات هنا الى قاعدة البيانات
        'create correct command object and set properties
        oCmd = GetCommand()
        oCmd.CommandTimeout = 5000
        oCmd.CommandText = SQL

        'pass off for processing
        Return DSFromSP(oCmd)

    End Function
Public Function LoadAllData(ByVal College As String) As DataView
        --Create your DB Connection here....
        Dim dsAllStudents As System.Data.DataSet
        Dim dView As System.Data.DataView
        Dim SQL As String
-- هذا يتيح لك ان تأخذ المعلومات من الكاش لو أنك طلبت المعلومات مرة ثانية بدلا من الوصول الى الـ db
        dsAllStudents = Cache("dsAllStudents ")

        If dsAllStudents Is Nothing Then
            dsAllStudents = New DataSet

            SQL = "SELECT * FROM all_Students"
             -- هنا نملئ الداتاسيت
            dsAllStudents = da.DSFromSQL(SQL)
            --و هنا نخزنه في الكاش
            Cache("dsAllStudents ") = dsAllStudents 

         End If
-- هنا دائما الداتا فيو تحتفظ بالقيمة الافتراضية و الكاملة للداتاسيت حتى ولو عملت لها ترشيح او فلترة كما سيأتي لم اتيت مرة ثانية الى هذه الدالة .. فإنك ستحصل على ما تريد و ستحدث الفلترة للداتافيو من جديد لان  جعلنا قيمة الداتا فيو للقيمة 
DefaultView بتاع الداتاسيت
        dView = dsAllStudents.Tables(0).DefaultView

        Select Case College 
            Case "Medicine"
                dView.RowFilter = "College= '" & College & " ' "
            -- يمكنك اضافة اكثر من case اذا احببت او اكثر من عمود تقوم بفلترة الجدول بواسطته  مثل مثلا السنة التي فيه الطالب او المادة او ما تريد
        End Select
-- هنا القيمة التي تعود اليك هي القيمة المطلوبة لك و التي تم ترشيحها 
        Return dView
    End Function

بعد ان تقوم بهذه الفلترة ... الان يجب عليك ان تفعل التالي للداتا جريد

--
dim newDataView as DataView
newDataView = LoadAllData(ddlCollege.SelectedItem.Value)
YourDataGrid.DataSource = newDataView
YourDataGrid.DataBind()

الكثير يمكنك فعله لكن هذا كان على عجالة و ان شاءالله ينفعك و السلام عليكم

تم تعديل هذه المشاركة بواسطة alharethi في 30 مارس 2005 في 20:15

Quran_Signature.jpg
#5

السلام عليكم ورحمة الله وبركاته

اخواني جزاكم الله كل خير على الردود

اخي alharethi

عندي اكم سوأل لو سمحت

اقتباس
-- قم بتوصيل البيانات هنا الى قاعدة البيانات

      'create correct command object and set properties

ماذا نقصد اخي انا ما فهمت شو بدك اسوي و شو قصدك بال command object

oCmd = GetCommand()
 Return DSFromSp(oCmd)

اخي شو هي GetCommand لانها مش معرفة و شو المفروض انها اتسوي

ونفس الشي بالنسبة للDSFromSp برضو مش معرفة و شو عملها

 dsAllStudents = Cache("dsAllStudents ")

اخي كيف اعرف ال cache لانها مو معرقة وعمري ما استخدمتها

معلش سامحني غلبتك باسئلة كثيرة

بانتظار الرد

وجزاك الله عني كل خير

#6

معليش اخي الكريم

المعذرة ... هذا كود كنت انا اشتغل عليه و شغال معي طيب لكني سأدلك على كتاب Sams - ASP.NET Uleashed

سأعطيك المقال الذي فيه عملية الفلترة و يمكنك بعد ذلك تطبيقها على ما تحب

-- هذه الدوال هي دوال خاصة بي و لم اعطها كاملة و اذا احببت يمكن ان اعطيكها لكن لعلك تستفيد من هذه الاكواد

هذه هي الروابط الخاصة بـفلترة الداتاسيت ثم ربطها بالداتا جريد

Sams - ASP.NET Unleashed - كل اكواد الكتاب

Chapter 12 - Working with DataSets

عليك بالقائمة 12.17 فما فوق و سوف تحصل ان شاء الله على ما يفيدك

و السلام

Quran_Signature.jpg
#7

جزاك الله كل خير اخي ساراجع الدروس واحاول الوصول للمطلوب

لكن ساضع المشكلات التي ستواحهني لتساعدوني في حلها

#8

على استعداد ان شاء الله أن ابذل كل ما في وسعي و السلام

Quran_Signature.jpg
#9

السلام عيكم ورحمة الله وبركاته

اخوانبي عملت التالي بس ما اعطى نتيجة وين الغلط

كتبت الكود التاي في ال page_load

 Me.SqlDataAdapter1.Fill(Me.UsersDS1)
        Cache("Store") = Me.UsersDS1
        If Not IsPostBack Then
            Me.DataGrid1.DataBind()
        End If

و هذا في ال DropDownList1_SelectedIndexChanged

  Dim dvusers As DataView
        dvusers = UsersDS1.Tables("Users").DefaultView()
        dvusers.RowFilter = "Collage= '" & Me.DropDownList1.SelectedItem.Value & " ' "
        DataGrid1.DataSource = dvusers
        DataGrid1.DataBind()

وجزاكم الله كل خير

#10

وين الشباب

#11

اخي الكريم

انت لم تستفد من استخدام الـ Cache مطلقا لانك تدعو ما خزنته في الكاش لكنك لم تفحص اذا كنت قد حفظته في الكاش ام لا

افعل التالي كما هو موجود في قائمة 12.21

Sub Page_Load
  If Not IsPostBack Then
    ' Bind to datagrid
    dgrdProducts.DataSource = GetProducts()
    dgrdProducts.DataBind()
  End If
End Sub

Function GetProducts() As DataView
  Dim dstProducts As DataSet
  Dim conNorthwind As SqlConnection
  Dim dadProducts As SqlDataAdapter
  Dim dvwProducts As DataView

  dvwProducts = Cache( "Products" )
  If dvwProducts Is Nothing Then
    dstProducts = New DataSet()
    conNorthwind = New SqlConnection( "Server=localhost;UID=sa;PWD=secret;Database=Northwind" )
    dadProducts = New SqlDataAdapter( "Select * from Products", conNorthwind )
    dadProducts.Fill( dstProducts, "Products" )
    dvwProducts = dstProducts.Tables( "Products" ).DefaultView()
    Cache( "Products" ) = dvwProducts
  End If
  Return dvwProducts
End Function

Sub dgrdProducts_SortCommand( s As Object, e As DataGridSortCommandEventArgs )
  Dim dvwProducts As DataView

  ' Sort DataView
  dvwProducts = GetProducts()
  dvwProducts.Sort = e.SortExpression

  ' Rebind to DataGrid
  dgrdProducts.DataSource = dvwProducts
  dgrdProducts.DataBind()
End Sub

حاول ان تستخدم بعض الدوال من اجل ان تسهل عملية الذهاب و والإياب

ايضا لاحظ كيف تمت عملية استدعاء الكاش ....

dvwProducts = Cache( "Products" ) -- اذا كان مخزن في الكاش خذه و إلم فاستدعه ثم خزنه اخيرا في الكاش
  If dvwProducts Is Nothing Then
    dstProducts = New DataSet()
    conNorthwind = New SqlConnection( "Server=localhost;UID=sa;PWD=secret;Database=Northwind" )
    dadProducts = New SqlDataAdapter( "Select * from Products", conNorthwind )
    dadProducts.Fill( dstProducts, "Products" )
    dvwProducts = dstProducts.Tables( "Products" ).DefaultView()
    Cache( "Products" ) = dvwProducts --   هنا يتم تخزين الداتا فيو في الكاش اذا لم تكن مخزنة
  End If

و السلام عليكم

تم تعديل هذه المشاركة بواسطة alharethi في 2 أبريل 2005 في 19:53

Quran_Signature.jpg
#12

السلام عليكم

اخي الحبيب ان رايت هذا الكود

لكن هناك شغلات لم افهما مثلا ما فائدة dgrdProducts_SortCommand وماذا تعمل ال e.SortExpression

اخي انا مش هدفي استخدم الكاش او لا انا المهم عندي اعمل الفلترة بوجود كاش او عدمه

بعدين اين ساحدد الفلتر المستخدم في الكود السايق ان اريد ان احدده من من خلالdropdownlist

كما قلت سابقا لنفرض اني اريد عمل فلتر لل datagrid ليعرض طلاب كلية ال IT مثلا اخي انا اظن الكود الي انا كتبتوا يحتاج لتعديل لكني لا اعرف اين

لانو ما بعطيني ERROR ولكن ما بعطيني المطلوب و يبقى ال DATAGRID على حالوا بدون ان يتأثر

و للعلم كل المعلمات التي اريدها موجودة في جدول واحد

ارجو ان تكزن الصورة اتضحت

وجزاك الله كل خير يا اخي انا غلبتك لكن هيك حال المبتدئين :D

#13

السلام عايكم

اخواني اعرفت وين الغلط

ان كنت حاطط في ال page_load الكود التالي

Me.SqlDataAdapter1.Fill(Me.UsersDS1)
              If Not IsPostBack Then
           Me.DataGrid1.DataBind()
       End If

طبعا المفوروض يكون هيك

    
    If Not IsPostBack Then
           Me.DataGrid1.DataBind()
Me.SqlDataAdapter1.Fill(Me.UsersDS1)
       End If

الحمد لله عمل فلتر بس المشكلة انو ما اعطى ولا record

اعطاني ال datagrid فاضي ضل في اشي ناقص

ساعدوني فتح الله عليكم

#14
اقتباس
الحمد لله عمل فلتر بس المشكلة انو ما اعطى ولا record

اعطاني ال datagrid فاضي ضل في اشي ناقص

قم يتعريف كائن الـ DataView كالتالي

Public Shared dv As DataView

في منطقة الاعلانات العامة ثم قم باستخدامها في الشفرة بصورة طبيعية

والله أعلم

والله الموفق

#15

والله يا اخي Ammar Gaffar ما زبطت للاسف:(

#16

اخي محمد ابو صلاح هنا :) يبدو المسائل حتنحل ان شاء الله

#17

-waf

هذا الموضوع مغلق.

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