نضع في تبويب (إدخال)، أداتي 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]
الآن أصبحنا جاهزين لإدخال البيانات، في حدث ضغط زر حفظ نكتب:
كود :
[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، نكتب:
كود :
[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]
هكذا انتهينا من (إدخال وتعديل)، نتوجه لتبويب (حذف)، سوف يكون كهذا:
في حدث زر حذف، نكتب:
كود :
[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، فقط:
كود :
[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]