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

طريقة تقسيم كمية عرض البيانات داخل الأداة ( DataGridView ) أو مايسمى بالـ ( Paging )

بدأه lo2i في 11 يوليو 2011 · 4 رد · 3,218 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

سنتحدث في هذا الدرس عن كيفية تقسيم البيانات لعرضها داخل أداة DataGridView ,, وهذه الطريقة تستخدم في البرامج الضخمة التي يحتمل أن يصل عدد السجلات التي ستسدعى من خلال الإستعلام إلى مئات الالاف .

في هذه الحالة بالفعل لن تقوم بعرض مئات الألاف مرة واحدة في الاداة DataGridView

لهذا قمت بعمل كود يعتمد على هذه الفكرة وقمت بإستخدام الفكرة الموضوعة في موضوعي هنا لأنشاء قائمة ListItem

تعلم إنشاء قائمة ListItem خاصة بك ,, ماهي ؟ و ماخصائصها ؟ و مافوائدها ؟

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

post-203092-057993000 1310415026_thumb.j

ومن ثم نقوم بإختيار اللغة التي سنعمل عليها التطبيق.

ومن ثم نقوم بإنشاء كلاس Class ونقوم بتسميته بـ ListItem

VB.NET


Private _text As String = String.Empty
Private _value As Integer

Public Sub New(ByVal text As String, ByVal value As Integer)
_text = text
_value = value
End Sub

Public Property text() As String
Get
Return _text
End Get
Set(ByVal value As String)
_text = value
End Set
End Property
Public Property value() As Integer
Get
Return _value
End Get
Set(ByVal value As Integer)
_value = value
End Set
End Property
Public Overrides Function ToString() As String
Return _text
End Function
End Class
Public Class listitem

C#


{
class listitem
{
private string _text = string.Empty;
private int _value;

public listitem(string text, int value)
{
_text = text;
_value = value;
}

public string text
{
get { return _text; }
set { _text = value; }
}
public int value
{
get { return _value; }
set { _value = value; }
}
public override string ToString()
{
return _text;
}
}
}
namespace C_Sharp_Paging___Example_

قمنا بتعريف كلاس خاص سنستخدمه لنسب قيمة أخرى غير القيمة الأساسية التي سنعين من خلالها مقدار السجلات والمتبقي منها :)

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

وبعد أن نقوم بعمل شاشة مصغرة تشبه هذه الصورة :

post-203092-082831000 1310415070_thumb.j

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

VB.NET


Dim max As Integer = 10
Dim x As Integer, y As Integer
    Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath & "\db.accdb;Persist Security Info=False;")

C#

   OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +  Application.StartupPath + @"\db.accdb;Persist Security Info=False;");
         int max = 10;
         int x,y;

كما نقوم ايضاً بإضافة فضاء الاسماء الذي يتيح لنا التعامل مع محرك الاكسيس

VB.NET

Imports System.Data.OleDb

C#

using System.Data.OleDb;

-----------

وفي حدث الـ Form_Load

VB.NET


If con.State = ConnectionState.Open Then
con.Close()
End If
con.Open()
x = (Convert.ToInt32(cmd.ExecuteScalar()))
con.Close()

Dim z As Integer = x / max
y = x Mod max
If y <> 0 Then
z += 1
End If

For r = 1 To z
ComboBox1.Items.Add(New listitem(r, r * max - max))
Next

ComboBox1.SelectedIndex = 0
       Dim cmd As New OleDbCommand("select count(*) from orders", con)

C#

 OleDbCommand cmd = new OleDbCommand("select count(*) from orders", con);
             if (con.State == ConnectionState.Open)
             {
                 con.Close();
             }
             con.Open();
             x = (Convert.ToInt32(cmd.ExecuteScalar()));
             con.Close();

              int z = x / max;
              y = x % max ;
             if (y != 0)
             {
                 z++;
             }


             for (x = 1; x <= z; x++)
             {
                 comboBox1.Items.Add(new listitem(Convert.ToString(x), x * max - max));
             }
             comboBox1.SelectedIndex=0;

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

وفي حدث الـ ComboBox1_SelectedIndexChanged نقوم بكتابة الكود التالي :

VB.NET


Dim dt As New DataTable()
dt.Clear()
con.Open()
da.Fill(DirectCast(ComboBox1.SelectedItem, listitem).value, max, dt)
con.Close()
DataGridView1.DataSource = dt
   Dim da As New OleDbDataAdapter("select * from orders order by id", con)

C#


DataTable dt = new DataTable();
dt.Clear();
con.Open();
da.Fill(((listitem)comboBox1.SelectedItem).value, max, dt);
con.Close();
dataGridView1.DataSource = dt;
 OleDbDataAdapter da = new OleDbDataAdapter("select * from orders order by id", con);

---------

وبعد أن تقوم بعمل Run المشروع سيظهر لك الشكل التالي

post-203092-001101300 1310415050_thumb.j

يوجد في المرفقات نفس المثال ,, على الطريقتين (VB.NET & C Sharp)

لاتنسوني من دعائكم ,,

م.لؤي

vb.net Pagin Example.rar

C Sharp Paging (Example).rar

المرفقات
1.jpg2.jpg3.jpg
3

.

#2

جزاك الله خيرا B)

#3

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

شكرا اخي على المجهود الرائع .. تمنياتي لك بالتوفيق ..

.:: Wish to become better and better ::.

#4

السلام عليكم

بارك الله فيك

تم تعديل هذه المشاركة بواسطة dot.net2008 في 14 أكتوبر 2011 في 21:55

#5
lo2i كتب:

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

سنتحدث في هذا الدرس عن كيفية تقسيم البيانات لعرضها داخل أداة DataGridView ,, وهذه الطريقة تستخدم في البرامج الضخمة التي يحتمل أن يصل عدد السجلات التي ستسدعى من خلال الإستعلام إلى مئات الالاف .

في هذه الحالة بالفعل لن تقوم بعرض مئات الألاف مرة واحدة في الاداة DataGridView

لهذا قمت بعمل كود يعتمد على هذه الفكرة وقمت بإستخدام الفكرة الموضوعة في موضوعي هنا لأنشاء قائمة ListItem

تعلم إنشاء قائمة ListItem خاصة بك ,, ماهي ؟ و ماخصائصها ؟ و مافوائدها ؟

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

 

attachicon.gif1.jpg

 

 

ومن ثم نقوم بإختيار اللغة التي سنعمل عليها التطبيق.

ومن ثم نقوم بإنشاء كلاس Class ونقوم بتسميته بـ ListItem

VB.NET

Public Class listitem
Private _text As String = String.Empty
Private _value As Integer

Public Sub New(ByVal text As String, ByVal value As Integer)
_text = text
_value = value
End Sub

Public Property text() As String
Get
Return _text
End Get
Set(ByVal value As String)
_text = value
End Set
End Property
Public Property value() As Integer
Get
Return _value
End Get
Set(ByVal value As Integer)
_value = value
End Set
End Property
Public Overrides Function ToString() As String
Return _text
End Function
End Class

C#

namespace C_Sharp_Paging___Example_
{
class listitem
{
private string _text = string.Empty;
private int _value;

public listitem(string text, int value)
{
_text = text;
_value = value;
}

public string text
{
get { return _text; }
set { _text = value; }
}
public int value
{
get { return _value; }
set { _value = value; }
}
public override string ToString()
{
return _text;
}
}
}

قمنا بتعريف كلاس خاص سنستخدمه لنسب قيمة أخرى غير القيمة الأساسية التي سنعين من خلالها مقدار السجلات والمتبقي منها :)

 

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

وبعد أن نقوم بعمل شاشة مصغرة تشبه هذه الصورة :

attachicon.gif3.jpg

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

VB.NET

 Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath & "\db.accdb;Persist Security Info=False;")
Dim max As Integer = 10
Dim x As Integer, y As Integer

C#

 OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + @"\db.accdb;Persist Security Info=False;");
int max = 10;
int x,y;

 

كما نقوم ايضاً بإضافة فضاء الاسماء الذي يتيح لنا التعامل مع محرك الاكسيس

VB.NET

Imports System.Data.OleDb

C#

using System.Data.OleDb;

-----------

وفي حدث الـ Form_Load

VB.NET

 Dim cmd As New OleDbCommand("select count(*) from orders", con)
If con.State = ConnectionState.Open Then
con.Close()
End If
con.Open()
x = (Convert.ToInt32(cmd.ExecuteScalar()))
con.Close()

Dim z As Integer = x / max
y = x Mod max
If y <> 0 Then
z += 1
End If

For r = 1 To z
ComboBox1.Items.Add(New listitem(r, r * max - max))
Next

ComboBox1.SelectedIndex = 0

C#

 OleDbCommand cmd = new OleDbCommand("select count(*) from orders", con);
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.Open();
x = (Convert.ToInt32(cmd.ExecuteScalar()));
con.Close();

int z = x / max;
y = x % max ;
if (y != 0)
{
z++;
}


for (x = 1; x <= z; x++)
{
comboBox1.Items.Add(new listitem(Convert.ToString(x), x * max - max));
}
comboBox1.SelectedIndex=0;

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

 

وفي حدث الـ ComboBox1_SelectedIndexChanged نقوم بكتابة الكود التالي :

VB.NET

 Dim da As New OleDbDataAdapter("select * from orders order by id", con)
Dim dt As New DataTable()
dt.Clear()
con.Open()
da.Fill(DirectCast(ComboBox1.SelectedItem, listitem).value, max, dt)
con.Close()
DataGridView1.DataSource = dt

C#

 OleDbDataAdapter da = new OleDbDataAdapter("select * from orders order by id", con);
DataTable dt = new DataTable();
dt.Clear();
con.Open();
da.Fill(((listitem)comboBox1.SelectedItem).value, max, dt);
con.Close();
dataGridView1.DataSource = dt;

---------

وبعد أن تقوم بعمل Run المشروع سيظهر لك الشكل التالي

attachicon.gif2.jpg

 

يوجد في المرفقات نفس المثال ,, على الطريقتين (VB.NET & C Sharp)

لاتنسوني من دعائكم ,,

م.لؤي

 

 

مثال رائع جزاك الله خير

:)  :)  :)  شكرا لكل من علمني حرفا :)  :)  :)


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