تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
LinqToSQL اضافة حذف تعديل بحث
#1
[b]
بسم الله الرحمن الرحيم
وصلى الله على محمد وآله الطاهرين

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


سنقوم في هذا الموضوع ببناء مشروع يتعامل مع تقنية Linq مع قواعد بيانات SQL يؤدي العمليات الاساسية التي تحتاجها كل برنامج قاعدة بيانات من (اضافة ,حذف ,تعديل ,بحث ,طباعة تقرير (سنستخدم تقارير مايكروسوفت Report.rdlc) واستعراض السجل السابق واللاحق) لكي يكون مرجعا لكل من يريد تعلم هذه التقنية واستخدامها مع قواعد بيانات SQL.


بسم الله نبدأ

اولا : سنقوم بإنشاء قاعدة بيانات باسم std عن طريق برنامج الSQL Management Studio ومن ثم نقوم بإنشاء جدول باسم StdInfo
ونضيف اليه الحقول (ID, FName, DoB, Adress) ونضبط خصائص الحقول كما في الشكل الآتي:



مع جعل حقل الID مفتاح اساسي و ترقيم تلقائي من خاصية Identity column كما هو موضح في الصورة اعلاه.

ثانيا : نفتح مشروع جديد باسم Lint_to_SQL ونصمم الواجهة بالشكل الآتي:



ونقوم بضبط خصائص الادوات كما في الجدول الآتي:



ثالثا : من Project ثم Add New Item تظهر لنا الشكل الآتي:



نفعل كما في الصورة أي نختار LINQ to SQL Classes (هذا الClass وسيلة لربط قاعدة بيانات SQL بالبرنامج بتقنية الLINQ) ومن ثم نضغط على Add فتظهر لنا الشكل الآتي:



من الخصائص نغير الاسم الى Std_DBase
وبعد ذلك من الToolBox التي على اليسار نسحب أداة Class,لاحظ الشكل الآتي:



نغير اسم الClass (والتي يعادل جدول في قاعدة البيانات) الى StdInfo او أي اسم تختاره وفي حقل الSource نكتب اسم الجدول في قاعدة البيانات وهذا مهم جدا ,لاحظ الشكل اعلاه.

الان نضيف اربعة خصائص(Properties) (حقول) الى الClass كالآتي:



ونضبط خصائص الحقول كالآتي:



ملاحظة : هنا جعلت اسماء الحقول تتطابق مع اسماء الحقول في قاعدة البيانات لسهولة التعامل ,لكن تستطيع تغييرها كما تريدها انت.
اهم الملاحظات:
1- جعل خاصية الAuto Generated Value لحقل الID يساوي True لان الحقل الذي يقابله في قاعدة البيانات ترقيم تلقائي.
2- جعل خاصية الPrimary Key للID يساوي True.
3- أهم شيء هو تحديد الSource لكل الحقول ومعناه اسم الحقل في قاعدة البيانات.
4- تحديد الServer Data Type كما في الجدول في قاعدة البيانات (int, varchar, double , ………..)
5- تحديد الType للحقول التي أنشئناها في الClass بما يطابق نوع الحقول في الجدول في قاعدة البيانات.

رابعا : نضيف نموذج الى المشروع لعرض التقرير ونسميه Report Form ومن ثم نضيف اليه اداة Report Viewer بعد ذلك من Project ثم Add New Item نضيف تقرير فارغ الى المشروع ( لمعرفة المزيد عن تصميم التقارير راجع هذا الرابط : كيفية تمرير البيانات الى Microsoft Report عن طريق الباراميترات )
الان نضيف اربع باراميترات الى التقرير بأسماء (ID, Fname, Dob, Address) ,ايضا يمكنك مراجعة الرابط اعلاه لمعرفة المزيد.
ونصمم التقرير بهذا الشكل:



حيث(معلومات الطلبة والعناوين والخطوط الافقية في الPage header) والوقت والترقيم في الPage footer لكي تتكرر في كل الصفحات في حال كون التقرير يتكون اكثر من صفحة.
ونضيف الباراميترات التي انشأناها الى التقرير كما في الشكل اعلاه.

ملاحظة : يمكن اضافة الPage header and footer من شريط الTool bar Report.

ملاحظة : الPage Number والExecution Time تستطيع اضافتها من نافذة الReport Data من الBuilt-in-Fields.


الآن نأتي الى كتابة الاكواد ,وستكون بلغتي الC# والVB

اولا : نضيف مجالات الاسماء التالية:

C#
PHP كود :
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;
using System.IO;
using System.Collections

VB
PHP كود :
Imports System.Data.SqlClient
Imports Microsoft
.Reporting.WinForms
Imports System
.IO
Imports System
.Collections 

ثانيا : المتغيرات العامة:

C#
PHP كود :
// نص الاتصال بقاعدة البيانات
private string constr = @"Data Source=.\SQLEXPRESS;Initial Catalog=std;Integrated Security=True;Connect Timeout=30;User Instance=false";
//linqمن قاعدة البيانات التي تتعامل مع تقنية ال instanceانشاء 
private Std_DBase  dbo;
// لتضم بيانات الطلاب اثناء  تحميلها من الجدول في قاعدة البيانات Studentsانشاء قائمة من نوع 
private List<Studentsstudent;
  
 private 
int i
     
pos // موقع السجل (للتنقل بين السجلات)
     
start 0  //  بداية الصفحة من السجل الاول
     
end 5// نهاية الصفحة (هنا حددنا 5 سجلات فقط للصفحة اثاء عرض السجلات في ال DataGrudView)
 
private ReportDataSource rep_source// لتحديد مصدر البيانات للتقرير
private ReportParameter[] rep_param//  مصفوفة من الباراميترات التي ستمرر الى التقرير 

VB
PHP كود :
' نص الاتصال بقاعدة البيانات
        Private constr As String = "Data Source=.\SQLEXPRESS;Initial Catalog=std;Integrated Security=True;Connect Timeout=30;User Instance=false"
        '
linqمن قاعدة البيانات التي تتعامل مع تقنية ال instanceانشاء 
        
Private dbo As Std_DBase
        
' لتضم بيانات الطلاب اثناء  تحميلها من الجدول في قاعدة البيانات Studentsانشاء قائمة من نوع 
        Private student As List(Of Students)

        
        
        Private i As Integer,
            pos As Integer = 0 ' 
موقع السجل (للتنقل بين السجلات)
        , 
start As Integer '  بداية الصفحة من السجل الاول
        , endd As Integer = 5 ' 
نهاية الصفحة (هنا حددنا 5 سجلات فقط للصفحة اثاء عرض السجلات في ال DataGrudView)
        
        Private 
rep_source As ReportDataSource ' لتحديد مصدر البيانات للتقرير
        
        Private rep_param As ReportParameter() '  
مصفوفة من الباراميترات التي ستمرر الى التقرير 

ثالثا : نضيف Class الى المشروع باسم Students لغرض تصفح المعلومات:

C#
PHP كود :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace 
Linq_to_Sql
{
    public class 
Students
    
{
        private 
int id;
        private 
string fnameaddress;
        private 
DateTime Dob;// (Date of Birth) تاريخ الولادة
 
        
public int ID
        
{
            
set id value; }
            
get { return id; }
        }
        public 
string Fname
        
{
            
set fname value; }
            
get { return fname; }
        }
        public 
DateTime DoB
        
{
            
set Dob value; }
            
get { return Dob; }
        }
        public 
string Address
        
{
            
set address value; }
            
get { return address; }
        }
    }
//Class End
}//Namespace End 

VB
PHP كود :
Imports System
Imports System
.Collections.Generic
Imports System
.Linq
Imports System
.Text

Namespace Linq_to_Sql
    
Public Class Students
        
Private m_id As Integer
        
Private m_fname As Stringm_address As String
        
Private m_Dob As DateTime ' (Date of Birth) تاريخ الولادة
        
        Public Property ID() As Integer
            Get
                Return m_id
            End Get
            Set
                m_id = value
            End Set
        End Property
        Public Property Fname() As String
            Get
                Return m_fname
            End Get
            Set
                m_fname = value
            End Set
        End Property
        Public Property DoB() As DateTime
            Get
                Return m_Dob
            End Get
            Set
                m_Dob = value
            End Set
        End Property
        Public Property Address() As String
            Get
                Return m_address
            End Get
            Set
                m_address = value
            End Set
        End Property
    End Class
    '
Class End
End 
Namespace
'Namespace End 

نحدد نص الاتصال لقاعدة البيانات في حدث الLoad للForm

C#
PHP كود :
private void Form1_Load(object senderEventArgs e)
{
    
dbo = new Std_DBase(constr); //Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية 


VB
PHP كود :
Private Sub Form1_Load(sender As ObjectAs EventArgs)
            
dbo = New Std_DBase(constr'Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية
        End Sub 

اضافة البيانات:

C#
PHP كود :
private void insert_btn_Click(object senderEventArgs e)
        {
            
            
//Insert Data
 
            
StdInfo std1 = new StdInfo(); //DataClasses1.dbml الذي اضفناه الى نموذج ال Classمن ال Instanceانشاء 
 
            // اسناد المعلومات الى خصائص الفئة ليتم حفظها في قاعدة البيانات
            
std1.FName name_txt.Text;
            
std1.DoB DateTime.Parse (dob_txt.Text);
            
std1.Address addr_txt.Text;
 
            
dbo.StdInfos.InsertOnSubmit(std1); // اضافة المعلومات الى الجدول
            
dbo.SubmitChanges(); // تأكيد التغييرات على الجدول
 
            
Enabled_btns(false);  // دالة لتفعيل او الغاء الاضافة سنأتي لها لاحقا
            
pos dbo.StdInfos.Count() - 1// تحديد اخر موقع لاخر سجل مضاف الى قاعدة البيانات
            
load_btn_Click(nullnull); // زر عرض المعلومات في الحقول التي على النموذج
        


VB
PHP كود :
Private Sub insert_btn_Click(sender As ObjectAs EventArgs)

            
'Insert Data

            Dim std1 As New StdInfo() '
DataClasses1.dbml الذي اضفناه الى نموذج ال Classمن ال Instanceانشاء
             
            
' اسناد المعلومات الى خصائص الفئة ليتم حفظها في قاعدة البيانات
            std1.FName = name_txt.Text
            std1.DoB = DateTime.Parse(dob_txt.Text)
            std1.Address = addr_txt.Text

            dbo.StdInfos.InsertOnSubmit(std1) ' 
اضافة المعلومات الى الجدول
            
            dbo
.SubmitChanges() ' تأكيد التغييرات على الجدول
            
            Enabled_btns(False) ' 
دالة لتفعيل او الغاء الاضافة سنأتي لها لاحقا
            
            pos 
dbo.StdInfos.Count() - ' تحديد اخر موقع لاخر سجل مضاف الى قاعدة البيانات
            
            load_btn_Click(Nothing, Nothing) ' 
زر عرض المعلومات في الحقول التي على النموذج
            
        End Sub 

حذف البيانات:

C#
PHP كود :
private void delete_btn_Click(object senderEventArgs e)
        {
 
            
//Delete Data
 
            
if (dbo.StdInfos.Count() != 0)
            {
                
// لحذف السجل حسب التسلسل Linqعبارة 
                
StdInfo del 
                  (
from StdInfo s in dbo.StdInfos
                   where s
.ID == int.Parse(id_txt.Text)
                   
select s)
                   .
Single(); // دالة تحدد فقط سجل واحد من المطابقة
                // or
                //std s = dclass.GetTable<std>().Where(c => (c.FName == name)).SingleOrDefault<std>();
                
dbo.StdInfos.DeleteOnSubmit(del); // حذف السجل المحدد
                
dbo.SubmitChanges(); // تأكيد التغييرات على الجدول
                
pos dbo.StdInfos.Count() - 1// تحديد اخر موقع لأخر سجل مضاف الى قاعدة البيانات
                
                // هذا الشرط لتجنب وصول متغير الموقع الى السالب عند حذف اخر سجل من الجدول  
                
if (pos 0)
                    
pos 0;
                
load_btn_Click(nullnull);
            }
        } 

VB
PHP كود :
Private Sub delete_btn_Click(sender As ObjectAs EventArgs)

            
'Delete Data

            If dbo.StdInfos.Count() <> 0 Then
                ' 
لحذف السجل حسب التسلسل Linqعبارة 
                Dim del 
As StdInfo = (From s In dbo.StdInfos Where s.ID Integer.Parse(id_txt.Text)s)
                .[
Single]() ' دالة تحدد فقط سجل واحد من المطابقة
                
                ' 
or
                
'std s = dclass.GetTable<std>().Where(c => (c.FName == name)).SingleOrDefault<std>();
                dbo.StdInfos.DeleteOnSubmit(del) ' 
حذف السجل المحدد
                
                dbo
.SubmitChanges() ' تأكيد التغييرات على الجدول
                
                pos = dbo.StdInfos.Count() - 1 ' 
تحديد اخر موقع لأخر سجل مضاف الى قاعدة البيانات
                
                
' هذا الشرط لتجنب وصول متغير الموقع الى السالب عند حذف اخر سجل من الجدول  
                If pos < 0 Then
                    pos = 0
                End If
                load_btn_Click(Nothing, Nothing)
            End If
        End Sub 

للموضوع تكملة ان شاءالله

[/b]
الرد }}}}
تم الشكر بواسطة:
#2
السلام عليكم

تعديل البيانات:

C#
PHP كود :
private void update_btn_Click(object senderEventArgs e)
        {
 
            
//Update Data
 
            // التعديل ايضا حسب التسلسل
            
int id int.Parse(id_txt.Text);

            
// Linqتعبير اخر لل
            
StdInfo s dbo.GetTable<StdInfo>().Where(=> (c.ID == id)).Single();
            
s.FName name_txt.Text;
            
s.DoB DateTime.Parse(dob_txt.Text);
            
s.Address addr_txt.Text;
 
            
dbo.SubmitChanges(); // تأكيد التغييرات على الجدول
            
load_btn_Click(nullnull);
        } 

VB
PHP كود :
Private Sub update_btn_Click(sender As ObjectAs EventArgs)
            
'Update Data

            ' 
التعديل ايضا حسب التسلسل
            Dim id 
As Integer Integer.Parse(id_txt.Text)

            
' Linqتعبير اخر لل
            Dim s As StdInfo = dbo.GetTable(Of StdInfo)().Where(Function(c) (c.ID = id)).[Single]()
            s.FName = name_txt.Text
            s.DoB = DateTime.Parse(dob_txt.Text)
            s.Address = addr_txt.Text

            dbo.SubmitChanges() ' 
تأكيد التغييرات على الجدول
            
            load_btn_Click
(NothingNothing)
        
End Sub 


تحميل البيانات من الجدول في قاعدة البيانات:
اولا نضيف الدالة التالية:

C#
PHP كود :
private void Fill(int pos)
        {
            
Enabled_btns(true);
            
insert_btn.Enabled false;
            
id_txt.Text student[pos].ID.ToString();
            
name_txt.Text student[pos].Fname;
            
dob_txt.Text student[pos].DoB.ToString();
            
addr_txt.Text student[pos].Address;
        } 

VB
PHP كود :
Private Sub Fill(pos As Integer)
            
Enabled_btns(True)
            
insert_btn.Enabled False
            id_txt
.Text student(pos).ID.ToString()
            
name_txt.Text student(pos).Fname
            dob_txt
.Text student(pos).DoB.ToString()
            
addr_txt.Text student(pos).Address
        End Sub 


ثانيا

C#
PHP كود :
private void load_btn_Click(object senderEventArgs e)
        {
           
            
//Load
            
if (dbo.StdInfos.Count() > 0)
            {
                
// اختيار جميع السجلات من الجدول في قاعدة البيانات
                
var ss =
                    
from StdInfo s in dbo.StdInfos
                    select s
;
 
                
student = new List<Students>();
 
                foreach (var 
std in ss)
                {
                    
// Studentsاضافة جميع السجلات الى القائمة التي هي من نوع الفئة 
                    
student.Add(new Students
                    
{
                        
ID std.ID,
                        
Fname std.FName,
                        
DoB std.DoB,
                        
Address=std.Address 
                    
});
                    
                    
// للتكملة التلقائية للكلمات لحقل البحث
                    
srch_txt.AutoCompleteCustomSource.Add(std.FName);
                }
 
                
Fill(pos);
            }
            else
            {
                
MessageBox.Show("There is no record in table");
            }
        } 


VB
PHP كود :
Private Sub load_btn_Click(sender As ObjectAs EventArgs)

            
'Load
            If dbo.StdInfos.Count() > 0 Then
                ' 
اختيار جميع السجلات من الجدول في قاعدة البيانات
                Dim ss 
From s In dbo.StdInfoss

                student 
= New List(Of Students)()

                For 
Each std As var In ss
                    
' Studentsاضافة جميع السجلات الى القائمة التي هي من نوع الفئة 
                    student.Add(New Students() With { _
                        Key .ID = std.ID, _
                        Key .Fname = std.FName, _
                        Key .DoB = std.DoB, _
                        Key .Address = std.Address _
                    })

                    ' 
للتكملة التلقائية للكلمات لحقل البحث
                    srch_txt
.AutoCompleteCustomSource.Add(std.FName)
                
Next

                Fill
(pos)
            Else
                
MessageBox.Show("There is no record in table")
            
End If
        
End Sub 


عرض اول سجل

C#
PHP كود :
private void first_btn_Click(object senderEventArgs e)
        {
            
Fill(pos 0);
        } 

VB
PHP كود :
Private Sub first_btn_Click(sender As ObjectAs EventArgs)
            
Fill(InlineAssignHelper(pos0))
        
End Sub 


عرض اخر سجل

C#
PHP كود :
private void last_btn_Click(object senderEventArgs e)
        {
            
Fill(pos student.Count 1);
        } 

VB
PHP كود :
Private Sub last_btn_Click(sender As ObjectAs EventArgs)
            
Fill(InlineAssignHelper(posstudent.Count 1))
        
End Sub 


عرض السجل التالي

C#
PHP كود :
private void next_btn_Click(object senderEventArgs e)
        {
            if (
pos student.Count 1)
            {
                
pos++;
                
Fill(pos);
            }
        } 

VB
PHP كود :
Private Sub next_btn_Click(sender As ObjectAs EventArgs)
            If 
pos student.Count 1 Then
                pos 
+= 1
                Fill
(pos)
            
End If
        
End Sub 


عرض السجل السابق

C#
PHP كود :
private void prev_btn_Click(object senderEventArgs e)
        {
            if (
pos 0)
            {
                
pos--;
                
Fill(pos);
            }
        } 

VB
PHP كود :
Private Sub prev_btn_Click(sender As ObjectAs EventArgs)
            If 
pos 0 Then
                pos 
-= 1
                Fill
(pos)
            
End If
        
End Sub 

زر البحث

C#
PHP كود :
private void dosrch_btn_Click(object senderEventArgs e)
        {
 
            
//Search Data
 
            
load_btn_Click(nullnull);
 
            for (
0student.Counti++)
            {
                if (
srch_txt.Text == student[i].Fname)
                {
                    
id_txt.Text student[i].ID.ToString();
                    
name_txt.Text student[i].Fname;
                    
dob_txt.Text student[i].DoB.ToString();
                    
pos i;
                }
            }
 
            
//or
            /*std stud =
                (
                from std s in dclass.GetTable<std>()
                 where s.FName == src_txt.Text
                 select s
                 ).SingleOrDefault<std>();
 
            id_txt.Text = stud.ID.ToString();
            name_txt.Text = stud.FName;
            grade_txt.Text = stud.Grade.ToString();*/
        


VB
PHP كود :
Private Sub dosrch_btn_Click(sender As ObjectAs EventArgs)

            
'Search Data

            load_btn_Click(Nothing, Nothing)

            For i = 0 To student.Count - 1
                If srch_txt.Text = student(i).Fname Then
                    id_txt.Text = student(i).ID.ToString()
                    name_txt.Text = student(i).Fname
                    dob_txt.Text = student(i).DoB.ToString()
                    pos = i
                End If
            Next

            '
or
            
'std stud =
'                
(
'                from std s in dclass.GetTable<std>()
'                 
where s.FName == src_txt.Text
'                 select s
'                 
).SingleOrDefault<std>();

'            
id_txt.Text stud.ID.ToString();
'            name_txt.Text = stud.FName;
'            
grade_txt.Text stud.Grade.ToString();

        
End Sub 


تفعيل اضافة سجل جديد

C#
PHP كود :
private void new_btn_Click(object senderEventArgs e)
        {
            
Enabled_btns(true);
            
id_txt.Text name_txt.Text dob_txt.Text addr_txt.Text "";
        } 

VB
PHP كود :
Private Sub new_btn_Click(sender As ObjectAs EventArgs)
            
Enabled_btns(True)
            
id_txt.Text InlineAssignHelper(name_txt.TextInlineAssignHelper(dob_txt.TextInlineAssignHelper(addr_txt.Text"")))
        
End Sub 


دالة التفعيل

C#
PHP كود :
private void Enabled_btns(bool b)
        {
             
name_txt.Enabled dob_txt.Enabled insert_btn.Enabled addr_txt.Enabled b;
        } 

VB
PHP كود :
Private Sub Enabled_btns(As Boolean)
            
name_txt.Enabled InlineAssignHelper(dob_txt.EnabledInlineAssignHelper(insert_btn.EnabledInlineAssignHelper(addr_txt.Enabledb)))
        
End Sub 


الغاء التفعيل

C#
PHP كود :
private void cancel_btn_Click(object senderEventArgs e)
        {
            
Enabled_btns(false);
        } 

VB
PHP كود :
Private Sub cancel_btn_Click(sender As ObjectAs EventArgs)
            
Enabled_btns(False)
        
End Sub 


عرض السجلات في الDataGridView

C#
PHP كود :
private void show_btn_Click(object senderEventArgs e)
        {
            
DGV.DataSource "";
            if (
dbo.StdInfos.Count() > 0)
            {
                
DGV.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.AllCells;
if (
dbo.StdInfos.Count() <= 5)
                    
end dbo.StdInfos.Count();              
  
DGV.DataSource student.GetRange(startend);
DGV.Columns[0].HeaderText "التسلسل";
                
DGV.Columns[1].HeaderText "الاسم الكامل";
                
DGV.Columns[2].HeaderText "تاريخ الولادة";
                
DGV.Columns[3].HeaderText "العنوان";
            }
        } 

VB
PHP كود :
Private Sub show_btn_Click(sender As ObjectAs EventArgs)
            
DGV.DataSource ""
            
If dbo.StdInfos.Count() > 0 Then
                DGV
.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.AllCells
If dbo.StdInfos.Count() <= 5 Then
                end1 
dbo.StdInfos.Count()
End If
DGV.DataSource student.GetRange(startendd)
DGV.Columns(0).HeaderText "التسلسل"
            
DGV.Columns(1).HeaderText "الاسم الكامل"
            
DGV.Columns(2).HeaderText "تاريخ الولادة"
            
DGV.Columns(3).HeaderText "العنوان"
            
End If
        
End Sub 


طباعة السجل الحالي

C#
PHP كود :
private void current_btn_Click(object senderEventArgs e)
        {
            
ReportForm repf = new ReportForm();
 
            
rep_source = new ReportDataSource("student"student);
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source);
 
            
rep_param = new ReportParameter[4];
            
rep_param[0] = new ReportParameter("ID"id_txt.Text);
            
rep_param[1] = new ReportParameter("Fname"name_txt.Text);
            
rep_param[2] = new ReportParameter("Dob"DateTime.Parse(dob_txt.Text).ToShortDateString());
            
rep_param[3] = new ReportParameter("Address"addr_txt.Text);
 
            
repf.reportViewer1.LocalReport.SetParameters(rep_param);
            
repf.reportViewer1.RefreshReport();
 
            
repf.ShowDialog();
        } 

VB
PHP كود :
Private Sub current_btn_Click(sender As ObjectAs EventArgs)
            
Dim repf As New ReportForm()

            
rep_source = New ReportDataSource("student"student)
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source)

            
rep_param = New ReportParameter(3) {}
            
rep_param(0) = New ReportParameter("ID"id_txt.Text)
            
rep_param(1) = New ReportParameter("Fname"name_txt.Text)
            
rep_param(2) = New ReportParameter("Dob"DateTime.Parse(dob_txt.Text).ToShortDateString())
            
rep_param(3) = New ReportParameter("Address"addr_txt.Text)

            
repf.reportViewer1.LocalReport.SetParameters(rep_param)
            
repf.reportViewer1.RefreshReport()

            
repf.ShowDialog()
        
End Sub 


طباعة السجلات المحددة من الDataGridView عن طريق الفأرة


C#
PHP كود :
private void selected_btn_Click(object senderEventArgs e)
        {
            
ReportForm repf = new ReportForm();
 
            
DataGridViewSelectedRowCollection rc DGV.SelectedRows;
 
            
rep_source = new ReportDataSource("student"student);
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source);
 
            
int i 0;
            
string s1 ""s2 ""s3 ""s4 "";
 
            for (
0rc.Counti++)
            {
                
s1 += rc[i].Cells["ID"].Value.ToString() + Environment.NewLine Environment.NewLine;
                
s2 += rc[i].Cells["FName"].Value.ToString() + Environment.NewLine Environment.NewLine;
                
s3 += DateTime.Parserc[i].Cells["DoB"].Value.ToString()).ToShortDateString() + Environment.NewLine Environment.NewLine;
                
s4 += rc[i].Cells["Address"].Value.ToString() + Environment.NewLine Environment.NewLine;
            }
 
            
rep_param = new ReportParameter[4];
            
rep_param[0] = new ReportParameter("ID"s1);
            
rep_param[1] = new ReportParameter("Fname"s2);
            
rep_param[2] = new ReportParameter("Dob"s3);
            
rep_param[3] = new ReportParameter("Address"s4);
 
            
repf.reportViewer1.LocalReport.SetParameters(rep_param);
            
repf.reportViewer1.RefreshReport();
 
            
repf.ShowDialog();
        } 

VB
PHP كود :
Private Sub selected_btn_Click(sender As ObjectAs EventArgs)
            
Dim repf As New ReportForm()

            
Dim rc As DataGridViewSelectedRowCollection DGV.SelectedRows

            rep_source 
= New ReportDataSource("student"student)
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source)

            
Dim i As Integer 0
            Dim s1 
As String ""s2 As String ""s3 As String ""s4 As String ""

            
For 0 To rc.Count 1
                s1 
+= rc(i).Cells("ID").Value.ToString() & Environment.NewLine Environment.NewLine
                s2 
+= rc(i).Cells("FName").Value.ToString() & Environment.NewLine Environment.NewLine
                s3 
+= DateTime.Parse(rc(i).Cells("DoB").Value.ToString()).ToShortDateString() & Environment.NewLine Environment.NewLine
                s4 
+= rc(i).Cells("Address").Value.ToString() & Environment.NewLine Environment.NewLine
            Next

            rep_param 
= New ReportParameter(3) {}
            
rep_param(0) = New ReportParameter("ID"s1)
            
rep_param(1) = New ReportParameter("Fname"s2)
            
rep_param(2) = New ReportParameter("Dob"s3)
            
rep_param(3) = New ReportParameter("Address"s4)

            
repf.reportViewer1.LocalReport.SetParameters(rep_param)
            
repf.reportViewer1.RefreshReport()

            
repf.ShowDialog()
        
End Sub 


طباعة كافة السجلات

C#
PHP كود :
private void all_btn_Click(object senderEventArgs e)
        {
            
ReportForm repf = new ReportForm();
 
            
rep_source = new ReportDataSource("student"student);
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source);
 
            
int i 0;
            
string s1 ""s2 ""s3 ""s4 "";
 
            for (
0student.Counti++)
            {
                
s1 += student[i].ID.ToString() + Environment.NewLine Environment.NewLine;
                
s2 += student[i].Fname.ToString() + Environment.NewLine Environment.NewLine;
                
s3 += DateTime.Parse(student[i].DoB.ToString()).ToShortDateString() + Environment.NewLine Environment.NewLine;
                
s4 += student[i].Address.ToString() + Environment.NewLine Environment.NewLine;
            }
 
            
rep_param = new ReportParameter[4];
            
rep_param[0] = new ReportParameter("ID"s1);
            
rep_param[1] = new ReportParameter("Fname"s2);
            
rep_param[2] = new ReportParameter("Dob"s3);
            
rep_param[3] = new ReportParameter("Address"s4);
 
            
repf.reportViewer1.PageCountMode PageCountMode.Actual;
            
repf.reportViewer1.LocalReport.SetParameters(rep_param);
            
repf.reportViewer1.RefreshReport();
            
//Showing the report form
            
repf.ShowDialog();
        } 

VB
PHP كود :
Private Sub all_btn_Click(sender As ObjectAs EventArgs)
            
Dim repf As New ReportForm()

            
rep_source = New ReportDataSource("student"student)
            
repf.reportViewer1.LocalReport.DataSources.Add(rep_source)

            
Dim i As Integer 0
            Dim s1 
As String ""s2 As String ""s3 As String ""s4 As String ""

            
For 0 To student.Count 1
                s1 
+= student(i).ID.ToString() & Environment.NewLine Environment.NewLine
                s2 
+= student(i).Fname.ToString() & Environment.NewLine Environment.NewLine
                s3 
+= DateTime.Parse(student(i).DoB.ToString()).ToShortDateString() & Environment.NewLine Environment.NewLine
                s4 
+= student(i).Address.ToString() & Environment.NewLine Environment.NewLine
            Next

            rep_param 
= New ReportParameter(3) {}
            
rep_param(0) = New ReportParameter("ID"s1)
            
rep_param(1) = New ReportParameter("Fname"s2)
            
rep_param(2) = New ReportParameter("Dob"s3)
            
rep_param(3) = New ReportParameter("Address"s4)

            
repf.reportViewer1.PageCountMode PageCountMode.Actual
            repf
.reportViewer1.LocalReport.SetParameters(rep_param)
            
repf.reportViewer1.RefreshReport()
            
'Showing the report form
            repf.ShowDialog()
        End Sub 


عرض الصفحة التالية في الDataGridView (5 سجلات في كل صفحة)

C#
PHP كود :
private void nextpage_btn_Click(object senderEventArgs e)
        {
            if (
start student.Count 5)
            {
                
start += end;
                if (
start student.Count)
                    
end student.Count start;
                
DGV.DataSource student.GetRange(startend);
            }
        } 

VB
PHP كود :
Private Sub nextpage_btn_Click(sender As ObjectAs EventArgs)
            If 
start student.Count 5 Then
                start 
+= endd
                
If start student.Count Then
                    endd 
student.Count start
                End 
If
                
DGV.DataSource student.GetRange(startendd)
            
End If
        
End Sub 


عرض الصفحة السابقة في الDataGridView

C#
PHP كود :
private void prevpage_btn_Click(object senderEventArgs e)
        {
            if (
start 0)
            {
                if (
end 5)
                    
end 5;
                
start -= end;
                
DGV.DataSource student.GetRange(startend);
            }
        } 

VB
PHP كود :
Private Sub prevpage_btn_Click(sender As ObjectAs EventArgs)
            If 
start 0 Then
                
If endd 5 Then
                    endd 
5
                End 
If
                
start -= endd
                DGV
.DataSource student.GetRange(startendd)
            
End If
        
End Sub 


PHP كود :
Private Shared Function InlineAssignHelper(Of T)(ByRef target As Tvalue As T) As T
        target 
value
        
Return value
    End 
Function 

كما تلاحظون استخدام دالة الGetRange للList حيث نحدد البداية و النهاية (الصفحة تبدأ من اول سجل الى خامس سجل أي عرض 5 سجلات في كل صفحة)


[b]المثال في المرفقات بلغة C# بدون قاعدة بيانات



هذا والحمد لله الذي وفقنا لإتمام هذا الموضوع اسأل الله ان يوفقنا وإياكم لمراضيه ولا تنسونا من صالح دعواتكم
وصلى الله على محمد وآله الطاهرين
[/b]


الملفات المرفقة
.rar   Linq_to_Sql.rar (الحجم : 69.04 ك ب / التحميلات : 96)
الرد }}}}
تم الشكر بواسطة:
#3
الله يعطيك العافيه
الرد }}}}
تم الشكر بواسطة:
#4
الله يعافيك

شكرا على المرور
الرد }}}}
تم الشكر بواسطة:
#5
Thanks . . . . . . .
الرد }}}}
تم الشكر بواسطة:
#6
بارك الله فيك شرح مميز
الرد }}}}
تم الشكر بواسطة:
#7
السلام عليكم

وفيك بارك الله انت المميز ومبروك عالترقيةSmile
الرد }}}}
تم الشكر بواسطة:
#8
السلام عليكم ورحمة الله وبركاته

بحمد الله تعالى تم الانتهاء من عمل كتاب خاص بهذا الموضوع مع اضافات كثيرة توضح الكثير عن هذه التقنية بلغة #c.

فارجوا من الاخوان الاعضاء الاطلاع على الكتاب واخباري بالاخطاء سواء الاملائية او النحوية او من ناحية الامثلة والتعاريف.

الكتاب في المرفقات


الملفات المرفقة
.pdf   LINT_To_SQL Using C#.pdf (الحجم : 1.37 م ب / التحميلات : 36)
الرد }}}}
تم الشكر بواسطة:
#9
سجاد : بارك الله فيك .
حاول تشوف المثال اللى انا نزلته عن LINQ N_Tire

Abu Ehab : Microsoft Partner  & Systems Developer
الرد }}}}
تم الشكر بواسطة:
#10
وفيك بارك الله اخي الغالي

شايف المثال وتلسم ايدك عمل رائع والحمد لله اخيرا اتقنت العمل بالطبقات وكله بجهودك وتشجيعك لنا

لهذا عملت مثال Linq to SQL NTier مع الاجراءات المخزنة بلغة #C

وان شاءالله قريب العيد سأعمل موضوع واشرح المثال

شكرا على المرور
الرد }}}}
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم