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

فلترة الداتا جريد فيو

بدأه ™Sn!p3R™ في 17 أكتوبر 2013 · 22 رد · 1,825 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

كنت استخدم كود اعطانى ايه العضو المحترم samir ibrahim فى بعض المواضيع كنت اتسأل عن نفس المشكلة 

        Dim dataview2 As DataView = Datagridview1.DataSource
        Dim filter_by_lmonth, filter_by_lyear As String

        If ComboBox4.Text = "" And ComboBox3.Text = "" Then
            dataview2.RowFilter = ""
            Exit Sub
        End If
        If ComboBox3.Text <> "" Then
            filter_by_lmonth = " lmonth = " + Chr(39) + ComboBox3.Text + Chr(39)
        Else
            MsgBox("الرجاء اختيار الشهر")
            Exit Sub
        End If
        If ComboBox4.Text <> "" Then
            filter_by_lyear = " AND " + " lyear = " + ComboBox4.Text
        Else
            MsgBox("الرجاء اختيار السنة")
            Exit Sub
        End If

        Dim filter_expr = filter_by_lmonth + filter_by_lyear
        'MsgBox(filter_expr)
        dataview2.RowFilter = filter_expr

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

 

ابحث عن حل لهذه المشكلة 

 

شكراً

#2
public DataTable filterDataView(string whereCondition, object dataSource)
        {
            try
            {
                DataView dv = ((DataTable)dataSource).DefaultView;
                dv.RowFilter = whereCondition;
                return dv.ToTable();
            }
            catch (Exception e)
            {
                //showError("FilterDataView", e.Message);
                return null;
            }
            
        }

استخدم الدالة السابقة وقم باستدعائها كما يلي 

DataTable dt =  filterDataView("isDeleted = 1", dgvUsers.DataSource);
            if (dt != null)
                dgvUsers.DataSource = dt;

مع الاخذ بعين الاعتبار : 

dgvUsers هو الـ DataGridView المستخدم والمراد عمل الفلترة عليه.

 

وفي حال لم يتم حل المشكله التي واجهتك, ارجو ارسال طريقة الربط 

 

 

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

 

اتمنى التوفيق للجميع

تم تعديل هذه المشاركة بواسطة Marwan Alakhras في 17 أكتوبر 2013 في 18:49

1

<<<<<<<< NOTHING BEAT HUMAN BRAIN >>>>>>>>>>>>


https://itunes.apple.com/us/app/ding-dang/id564583614?mt=8

#3

شكرا اخى لتعاونك ولكنى اعمل على الفيجوال 2008 

 

لقد ارفقت لك مثال 

 

Search.rar

#4

طريقة عمل فيلتر على dataview تستوجب ان يكون لديك datatable binded with datagridview وانت استعملت DataReader مباشرة لملء Datagridview

اذا اردت استعمال نفس الطريقة السابقة فان اسرع حل هو ان تملا datatable  من datareader ومن ثم bind ال datagridview بال datatable ولكن ذلك يحتاج الى اعادة كتابة بعض الاكواد حتى لا نخسر تنسيق datagridview
 

هل هو ضروري ان تعبأ datagridview عن طريق loop بال datareader?

1

Samir Ibrahim

VFP Blog

VB.NET Blog

#5
samir ibrahim

اشكرك على التفاعل 

انا بدأت بهذه الطريقة و بنيت عليها المشروع كله و تغيرها يحتاج الى جهد كبير :(

#6

غير برنامجك الى الاتي

Sub FillDG(ByVal SQL)

        CreateConn()

        OpenConn()
        cmd.Connection = getConn()

        Datagridview1.Columns.Clear()
        cmd.CommandType = CommandType.Text
        '------------------
        cmd.CommandText = "select Table2.year ,month,rev,price from table2" & SQL

        dr = cmd.ExecuteReader
        Dim dt As New DataTable
        dt.Load(dr)

        Datagridview1.ColumnCount = 4

        Datagridview1.Columns(0).HeaderText = "السنة"
        Datagridview1.Columns(1).HeaderText = "الشهر"
        Datagridview1.Columns(2).HeaderText = "السلعة"
        Datagridview1.Columns(3).HeaderText = "السعر"

        fn_AssignDGVColumnData(me.Datagridview1,"year","month","rev","price")       
        
        Me.Datagridview1.AutoGenerateColumns = False
        Me.Datagridview1.DataSource = dt
        
        'Dim n As Integer
        'n = -1
        'Do While dr.Read

        '    n += 1
        '    Datagridview1.RowCount += 1
        '    Datagridview1.Item(0, n).Value = dr.Item("year")
        '    Datagridview1.Item(1, n).Value = dr.Item("month")
        '    Datagridview1.Item(2, n).Value = dr.Item("rev")
        '    Datagridview1.Item(3, n).Value = dr.Item("price")


'        Loop

        dr.Close()

        CloseConn()
        

    End Sub
Sub fn_AssignDGVColumnData(ByVal dgv As datagridview,ByVal ParamArray dgv_data() As String)
    For i = 0 to dgv_data.Length -1
        dgv.Columns(i).DataPropertyName = dgv_data(i)
    Next
End Sub

ثم استعمل الطريقة التي اعطيتك اياها في البحث

1

Samir Ibrahim

VFP Blog

VB.NET Blog

#7

جارى التطبيق ...

#8

السلام عليكم 

 

اخي اقوم باستخدام VS2010 ويوجد عندي مشكله في الربط مع قاعدة بيانات من نوع اكسس, فقمت باستخدام SQLSERVER 

 

في حين واجهتك صعوبة في فهم الطريقة المستخدمة , او في طريقة التحويل من SQL الى اكسس ارجو اعلامي

 

 

Search.rar

<<<<<<<< NOTHING BEAT HUMAN BRAIN >>>>>>>>>>>>


https://itunes.apple.com/us/app/ding-dang/id564583614?mt=8

#9

ظهر معى هذا الخطأ

 

image.jpg

تم تعديل هذه المشاركة بواسطة ™Sn!p3R™ في 18 أكتوبر 2013 في 12:59

#11
Marwan Alakhras كتب:

السلام عليكم 

 

اخي اقوم باستخدام VS2010 ويوجد عندي مشكله في الربط مع قاعدة بيانات من نوع اكسس, فقمت باستخدام SQLSERVER 

 

في حين واجهتك صعوبة في فهم الطريقة المستخدمة , او في طريقة التحويل من SQL الى اكسس ارجو اعلامي

 

حسننا اخى جارى تحميل المرفق و اشكرك جدا على المساعدة 

#12
Marwan Alakhras كتب:

لا يمكنني فتح الصورة المرفقة, ارسلها مره اخرى 

 

اخى الصورة بعد تطبيق كود الاخ 

samir ibrahim
#13

اخى قمت بتحميل المرفق و اخذت الكود من ملف ال Form1 كوبى و وضعته مكان الكود لدى فى فورم 1 على الفيجوال 2008 

 

و ظهر خطأ فى 3 سطور 

        tempDataTable = getDataTable("select year,month,rev,price from table2")
        Datagridview1.DataSource = getDataTable("select year,month,rev,price from table2")

getDataTable

getDataTable

 

و فى هذا ايطا 

    Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click

btnClear.Click

 

الكلمات باللون الاحمر هى التى ظهر بها ايرور 

تم تعديل هذه المشاركة بواسطة ™Sn!p3R™ في 18 أكتوبر 2013 في 13:05

#14

Marwan Alakhras 

 

لم انتبه لاسم زر البحث غيرت اسمه ف الكود و اشتغل 

 

باقى 

getDataTable

#15

getDataTable دالة موجودة في myDatabase 

 

btnClear زر يقوم بالغاء البحث ارجو اصافته الى الفورم 

post-219894-0-34063000-1382091152_thumb.

تم تعديل هذه المشاركة بواسطة Marwan Alakhras في 18 أكتوبر 2013 في 13:13

1

<<<<<<<< NOTHING BEAT HUMAN BRAIN >>>>>>>>>>>>


https://itunes.apple.com/us/app/ding-dang/id564583614?mt=8

#16

dim dataview as dataview = datagridview.datasource.defaultview

1

Samir Ibrahim

VFP Blog

VB.NET Blog

#17
Marwan Alakhras كتب:

getDataTable دالة موجودة في myDatabase 

 

btnClear زر يقوم بالغاء البحث ارجو اصافته الى الفورم 

 

 

شكراً جدا اخى على تعبك معايا تم حل المشكلة الحمدلله 

#18
samir ibrahim كتب:

dim dataview as dataview = datagridview.datasource.defaultview

 

 

عاجز عن الشكر الكود اشتغل الحمدلله بجد الف كلمة شكر مش كفاية :)

#19

يا هلا :)

Samir Ibrahim

VFP Blog

VB.NET Blog

#20

الاستاذ الفاضل  سمير  

بعد التحية

نزلت الملف المرفق  

ولم يعمل

اين اضع   dataview = Datagridview1.DataSource.defaultview

وهل هذه هي تقنية جديدة برجاء التوضيح

#21
atefkhalf2004 كتب:

 

اين اضع   dataview = Datagridview1.DataSource.defaultview

وهل هذه هي تقنية جديدة برجاء التوضيح

 

dataview هي احدى الطرق التي تستخدم لتصفية البيانات الموجودة في DataGridView  دون الحاجة إلى تغيير datagridview.datasource حيث تغيير مصدر البيانات في كل مرة تحدث فيها  فلتر قد يؤدي إلى بعض البطئ في الأداء

 

استعمالها #1

'get the datatable with any way you like
    Dim dt As New DataTable ' 
    ' assign datagridview datasource to datatable    
    Datagridview1.DataSource = dt

    ' since the datasource of the datagridview is datatable, 
    ' and datatable has DEfaultView, then you can use
    ' DataSource.DefaultView directly
    Dim dv As DataView = Datagridview1.DataSource.DefaultView 
    
    ' this line will filter the datagridview
    dv.RowFilter = filter_expression

#2

' get the datatable with any way you like
    Dim dt As New DataTable 
    ' create the dataview from datatable
    Dim dv As dataview = dt.DefaultView
    ' assign the source of the datagridview from the dataview
    datagridview1.datasource = dv
    ' filter the dataview which will filter the datagridview
    dv.RowFilter = filter_expression

Samir Ibrahim

VFP Blog

VB.NET Blog

#22

الاستاذ سمير   بعد التجية

 

ممكن وبعد اذنك  يتم التعديل علي المثال لاني لم اعرف الاستفادة

#23

هذا مثال باستخدام dataset and datatable and dataview and datagridview and customized datagridview وقاعدة البيانات هي access Northwind

 

 

filter_using_dataview.rar

Samir Ibrahim

VFP Blog

VB.NET Blog

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