تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إنشاء مشروع باستخدام sql server و linq وتقارير crystal report
#33
نضع في تبويب (إدخال)، أداتي GroupBox وأداة Button، داخل الـ groupBox1 نضع 3 Label و3 textBox، داخل الـ groupBox2 نضع أداة Panel وداخل الـ Panel نضع TextBox.
نضبطه ليكون هكذا:



بما أن رقم الهاتف قد يكون غير محدود، سوف نجعل الـ textbox المخصص لإدخال الرقم والذي اسميناه pbox يتضاعف عند كتابة رقم جديد، ومن ثم نحفظ البيانات دفعة واحدة في القاعدة، نذهب لحدث TextChanged التابع لمربع نص الرقم لنكتب فيه:
:#C
كود :
[align=left]if (plist.Controls[plist.Controls.Count - 1].Focused && plist.Controls[plist.Controls.Count - 1].Text.Length == 1)
{
    TextBox tb = new TextBox();
    tb.Width = pbox.Width;
    tb.Location = new Point(pbox.Location.X, (pbox.Top + pbox.Height + 5) * plist.Controls.Count);
    tb.TextChanged += new EventHandler(pbox_TextChanged);
    tb.KeyPress += new KeyPressEventHandler(pbox_KeyPress);

    plist.Controls.Add(tb);
}[/align]

:VB
كود :
[align=left]If plist.Controls(plist.Controls.Count - 1).Focused AndAlso plist.Controls(plist.Controls.Count - 1).Text.Length = 1 Then
    Dim tb As New TextBox()
    tb.Width = pbox.Width
    tb.Location = New Point(pbox.Location.X, (pbox.Top + pbox.Height + 5) * plist.Controls.Count)
    AddHandler tb.TextChanged, AddressOf pbox_TextChanged
    AddHandler tb.KeyPress, AddressOf pbox_KeyPress

    plist.Controls.Add(tb)
End If[/align]


قمنا بإنشاء مربع نص جديد، ووضعه في الـ plist، بعد ضبط خصائصه ومكانه، ثم أضفناه له أحداث كي نستطيع إضافة مربع نص آخر عند كل إضافة رقم جديد.
نريد تحديد الإدخال في مربع نص الرقم، ليقبل أرقام فقط، ولذلك نذهب لحدث الـ KeyPress التابع له لنكتب:
:#C
كود :
[align=left]e.Handled = !char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar);[/align]

:VB
كود :
[align=left]e.Handled = Not Char.IsDigit(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar)
[/align]


الآن أصبحنا جاهزين لإدخال البيانات، في حدث ضغط زر حفظ نكتب:
:#C
كود :
[align=left]if (string.IsNullOrEmpty(nbox.Text.Trim()) || string.IsNullOrEmpty(abox.Text.Trim()))
{ MessageBox.Show("يجب اكمال البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; }

DB.Persons person = new DB.Persons();
person.Name = nbox.Text.Trim();
person.Address = abox.Text.Trim();
person.Note = tbox.Text.Trim();

try { db.Persons.InsertOnSubmit(person); db.SubmitChanges(); }
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }

foreach (Control tb in plist.Controls)
    if (tb is TextBox && !string.IsNullOrEmpty(tb.Text))
    {
        DB.PhoneNumbers pn = new DB.PhoneNumbers();
        pn.PersonID = person.ID;
        pn.Phone = tb.Text;

        db.PhoneNumbers.InsertOnSubmit(pn);
    }

try { db.SubmitChanges(); } catch { }

MessageBox.Show("تمت الاضافة بنجاح!", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

nbox.Text = string.Empty;
abox.Text = string.Empty;
tbox.Text = string.Empty;
pbox.Text = string.Empty;

for (int i = 1; i <= 2; ++i)
    foreach (Control ctrl in plist.Controls)
        if (ctrl.Name != "pbox") plist.Controls.Remove(ctrl);

GetData();[/align]
:VB
كود :
[align=left]If String.IsNullOrEmpty(nbox.Text.Trim()) OrElse String.IsNullOrEmpty(abox.Text.Trim()) Then
    MessageBox.Show("يجب اكمال البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
    Return
End If

Dim person As New DB.Persons()
person.Name = nbox.Text.Trim()
person.Address = abox.Text.Trim()
person.Note = tbox.Text.Trim()

Try
    db.Persons.InsertOnSubmit(person)
    db.SubmitChanges()

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Exit Sub
End Try

For Each tb As Control In plist.Controls
    If TypeOf (tb) Is TextBox AndAlso Not String.IsNullOrEmpty(tb.Text) Then

Dim pn As New DB.PhoneNumbers()
pn.PersonID = person.ID
pn.Phone = tb.Text

db.PhoneNumbers.InsertOnSubmit(pn)
    End If
Next

Try
    db.SubmitChanges()

Catch
End Try

MessageBox.Show("تمت الاضافة بنجاح!", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

nbox.Text = String.Empty
abox.Text = String.Empty
tbox.Text = String.Empty
pbox.Text = String.Empty

For i As Integer = 1 To 2
    For Each ctrl As Control In plist.Controls
If (ctrl.Name <> "pbox") Then plist.Controls.Remove(ctrl)
    Next
Next

GetData()[/align]


GetData() إجراء سوف نضيفه فيما بعد إن شاء الله.
نذهب لتبويب (تعديل)، ونجعله كهذا الشكل:



في حدث الـ SelectedIndexChanged التابع للأداة nflist، نكتب:
:#C
كود :
[align=left]try
{
    DB.Persons person = (DB.Persons)nflist.SelectedValue;
    enbox.Text = person.Name;
    eabox.Text = person.Address;
    etbox.Text = person.Note;

    pflist_SelectedIndexChanged(sender, e);
}
catch { }[/align]

:VB
كود :
[align=left]Try

    Dim person As DB.Persons = CType(nflist.SelectedValue, DB.Persons)
    enbox.Text = person.Name
    eabox.Text = person.Address
    etbox.Text = person.Note

    pflist_SelectedIndexChanged(sender, e)

Catch
End Try
[/align]


في حدث زر (حفظ)، نكتب:
:#C
كود :
[/align]
try
{
    DB.Persons person = (DB.Persons)nflist.SelectedValue;
    person.Name = enbox.Text;
    person.Address = eabox.Text;
    person.Note = etbox.Text;

    db.SubmitChanges();

    MessageBox.Show("تم تحديث البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }[align=right]
:VB
كود :
[/align]
Try
    Dim person As DB.Persons = CType(nflist.SelectedValue, DB.Persons)
    person.Name = enbox.Text
    person.Address = eabox.Text
    person.Note = etbox.Text

    db.SubmitChanges()

    MessageBox.Show("تم تحديث البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try[align=right]


في حدث الـ SelectedIndexChanged التابع للأداة pflist، نكتب:
:#C
كود :
[/align]
epbox.Text = pflist.Text;[align=right]
:VB
كود :
[/align]
epbox.Text = pflist.Text[align=right]


الآن نأتي للـ LinkLabel، في (تحديث) نكتب:
:#C

كود :
[align=left]try
{
    DB.PhoneNumbers pn = (DB.PhoneNumbers)pflist.SelectedValue;
    pn.Phone = epbox.Text.Trim();

    db.SubmitChanges();

    MessageBox.Show("تم تحديث الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }
[/align]

:VB
كود :
[align=left]Try
    Dim pn As DB.PhoneNumbers = CType(pflist.SelectedValue, DB.PhoneNumbers)
    pn.Phone = epbox.Text.Trim()

    db.SubmitChanges()

    MessageBox.Show("تم تحديث الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
[/align]


في (إضافة)، نكتب:
:#C
كود :
[align=left]try
{
    DB.PhoneNumbers pn = new DB.PhoneNumbers();
    pn.PersonID = ((DB.Persons)nflist.SelectedValue).ID;
    pn.Phone = epbox.Text.Trim();

    db.PhoneNumbers.InsertOnSubmit(pn);
    db.SubmitChanges();

    MessageBox.Show("تمت إضافة الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }[/align]

:VB
كود :
[align=left]Try
    Dim pn As New DB.PhoneNumbers()
    pn.PersonID = CType(nflist.SelectedValue, DB.Persons).ID
    pn.Phone = epbox.Text.Trim()

    db.PhoneNumbers.InsertOnSubmit(pn)
    db.SubmitChanges()

    MessageBox.Show("تمت إضافة الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
[/align]


في (حذف) نكتب:
:#C
كود :
[align=left]if (MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;

try
{
    db.PhoneNumbers.DeleteOnSubmit((DB.PhoneNumbers)pflist.SelectedValue);
    db.SubmitChanges();

    MessageBox.Show("تم حذف الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }
[/align]

:VB
كود :
[align=left]If MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub

Try
    db.PhoneNumbers.DeleteOnSubmit(CType(pflist.SelectedValue, DB.PhoneNumbers))
    db.SubmitChanges()

    MessageBox.Show("تم حذف الرقم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
[/align]


هكذا انتهينا من (إدخال وتعديل)، نتوجه لتبويب (حذف)، سوف يكون كهذا:



في حدث زر حذف، نكتب:
:#C
كود :
[align=left]if (MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;

try
{
    var pn = from d in db.PhoneNumbers
             where d.PersonID == ((DB.Persons)dnflist.SelectedValue).ID
             select d;

    foreach (var p in pn) db.PhoneNumbers.DeleteOnSubmit(p);

    db.Persons.DeleteOnSubmit((DB.Persons)dnflist.SelectedValue);
    db.SubmitChanges();

    MessageBox.Show("تم حذف البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

    GetData();
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }[/align]

:VB
كود :
[align=left]If MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub

Try
    Dim pn = From d In db.PhoneNumbers
             Where d.PersonID = CType(nflist.SelectedValue, DB.Persons).ID
             Select d

    For Each p In pn
        db.PhoneNumbers.DeleteOnSubmit(p)
    Next

    db.Persons.DeleteOnSubmit(CType(nflist.SelectedValue, DB.Persons))
    db.SubmitChanges()

    MessageBox.Show("تم حذف البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

    GetData()

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try[/align]


نذهب لتبويب (استعراض)، سيكون كما يلي:



بقي أن نضيف إجراء GetData، فقط:
:#C
كود :
[align=left]private void GetData()
{
    try
    {
        var persons = from d in db.Persons
                      select d;

        BindingSource bsn = new BindingSource();
        bsn.DataSource = persons;

        BindingSource bsp = new BindingSource();
        bsp.DataSource = bsn;
        bsp.DataMember = "PhoneNumbers";
        //
        // تعديل البيانات
        //
        nflist.DataSource = bsn;
        nflist.DisplayMember = "Name";

        pflist.DataSource = bsp;
        pflist.DisplayMember = "Phone";
        //
        // حذف البيانات
        //
        dnflist.DataSource = bsn;
        dnflist.DisplayMember = "Name";
        //
        // استعراض البيانات
        //
        ndata.DataSource = null;
        ndata.Columns.Clear();
        ndata.AutoGenerateColumns = false;
        ndata.ColumnCount = 3;
        ndata.DataSource = bsn;
        ndata.Columns[0].HeaderText = "الاسم";
        ndata.Columns[1].HeaderText = "العنوان";
        ndata.Columns[2].HeaderText = "ملاحظات";
        ndata.Columns[0].DataPropertyName = "Name";
        ndata.Columns[1].DataPropertyName = "Address";
        ndata.Columns[2].DataPropertyName = "Note";

        pdata.DataSource = null;
        pdata.Columns.Clear();
        pdata.AutoGenerateColumns = false;
        pdata.ColumnCount = 1;
        pdata.DataSource = bsp;
        pdata.Columns[0].HeaderText = "رقم الهاتف";
        pdata.Columns[0].DataPropertyName = "Phone";
    }
    catch { }
}[/align]

:VB
كود :
[align=left]Private Sub GetData()
    Try
        Dim persons = From d In db.Persons
                      Select d

        Dim bsn As New BindingSource()
        bsn.DataSource = persons

        Dim bsp As New BindingSource()
        bsp.DataSource = bsn
        bsp.DataMember = "PhoneNumbers"
        '
        ' تعديل البيانات
        '
        nflist.DataSource = bsn
        nflist.DisplayMember = "Name"

        pflist.DataSource = bsp
        pflist.DisplayMember = "Phone"
        '
        ' حذف البيانات
        '
        dnflist.DataSource = bsn
        dnflist.DisplayMember = "Name"
        '
        ' استعراض البيانات
        '
        ndata.DataSource = Nothing
        ndata.Columns.Clear()
        ndata.AutoGenerateColumns = False
        ndata.ColumnCount = 3
        ndata.DataSource = bsn
        ndata.Columns(0).HeaderText = "الاسم"
        ndata.Columns(1).HeaderText = "العنوان"
        ndata.Columns(2).HeaderText = "ملاحظات"
        ndata.Columns(0).DataPropertyName = "Name"
        ndata.Columns(1).DataPropertyName = "Address"
        ndata.Columns(2).DataPropertyName = "Note"

        pdata.DataSource = Nothing
        pdata.Columns.Clear()
        pdata.AutoGenerateColumns = False
        pdata.ColumnCount = 1
        pdata.DataSource = bsp
        pdata.Columns(0).HeaderText = "رقم الهاتف"
        pdata.Columns(0).DataPropertyName = "Phone"

    Catch
    End Try
End Sub
[/align]


في حدث التحميل للنموذج، في آخر الكود تحت سطر Login() نكتب:
:#C
كود :
[align=left]GetData();
[/align]

:VB
كود :
[align=left]GetData
[/align]
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
إنشاء مشروع باستخدام sql server و linq وتقارير crystal report - بواسطة DreamsDotNet - 16-03-13, 06:10 PM


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


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