Code Zero نشر 13 فبراير أرسل تقرير نشر 13 فبراير formes.DB.TBL_SPECIALIST p = new formes.DB.TBL_SPECIALIST(); p.SPECIALIST_DATE = DateTime.Now; p.SPECIALIST_NAME = edt_name.Text; p.SPECIALIST_BIRTHDATE = edt_brith_date.Value; p.SPECIALIST_AGE_NOW = edt_age.Text; p.SPECIALIST_EDUCATION = edt_education.Text; p.SPECIALIST_ID_NUMBER = edt_id_num.Text; p.SPECIALIST_PHONE = edt_phone.Text; p.SPECIALIST_ADDRESS = edt_address.Text; p.SPECIALIST_ACTIVE = edt_active.Text; //listbox p.SPECIALIST_WORKED_BEFORE = lbx_work_history. السلام عليكم عندى ليست بوكس به اكثر من بيان اريد اضافة محتويات اليست بوكس الى الداتا تابل وهذا كود الاضافة وجزاكم الله خيرا اقتباس
0 ياسر مسكين نشر 13 فبراير أرسل تقرير نشر 13 فبراير (معدل) الكود الذي قدمته ناقص قليلا، وذلك لأنه يبدو أنك نسيت توجيه الليست بوكس إلى القيم التي تريد إضافتها إلى حقل `SPECIALIST_WORKED_BEFORE`. لهذا يمكنك استخدام حلقة `foreach` لتكرار عناصر الليست بوكس وإضافتها إلى الحقل المناسب. بهذه الطريقة: formes.DB.TBL_SPECIALIST p = new formes.DB.TBL_SPECIALIST(); p.SPECIALIST_DATE = DateTime.Now; p.SPECIALIST_NAME = edt_name.Text; p.SPECIALIST_BIRTHDATE = edt_brith_date.Value; p.SPECIALIST_AGE_NOW = edt_age.Text; p.SPECIALIST_EDUCATION = edt_education.Text; p.SPECIALIST_ID_NUMBER = edt_id_num.Text; p.SPECIALIST_PHONE = edt_phone.Text; p.SPECIALIST_ADDRESS = edt_address.Text; p.SPECIALIST_ACTIVE = edt_active.Text; فهنا قد استخدمت حلقة foreach لإضافة عناصر الليست بوكس إلى الحقل المناسب: foreach (var item in lbx_work_history.Items) { p.SPECIALIST_WORKED_BEFORE += item.ToString() + ", "; } // الآن يمكن إضافة الكائن p إلى الداتا تابل ويجب التأكد من تغيير "SPECIALIST_WORKED_BEFORE" بناءً على نوع البيانات في الداتا تابل. لكن تبقى هذه الطريقة تقليدية، فبالطبع، يمكن تحسين الكود ببعض الطرق، منها استخدام StringBuilder بدلاً من الانضمام المتكرر للنصوص، وكذلك تجنب استخدام foreach إذا كنت تستخدم LINQ وبناء النص بطريقة أكثر إتقانًا. بهذا الشكل: formes.DB.TBL_SPECIALIST p = new formes.DB.TBL_SPECIALIST() { SPECIALIST_DATE = DateTime.Now, SPECIALIST_NAME = edt_name.Text, SPECIALIST_BIRTHDATE = edt_brith_date.Value, SPECIALIST_AGE_NOW = edt_age.Text, SPECIALIST_EDUCATION = edt_education.Text, SPECIALIST_ID_NUMBER = edt_id_num.Text, SPECIALIST_PHONE = edt_phone.Text, SPECIALIST_ADDRESS = edt_address.Text, SPECIALIST_ACTIVE = edt_active.Text, SPECIALIST_WORKED_BEFORE = string.Join(", ", lbx_work_history.Items.Cast<object>()) }; هنا هذا الكود يستخدم مباشرة LINQ لتجنب استخدام حلقة foreach، ويستخدم StringBuilder ضمن ()string.Join تحت الغطاء للأداء الأفضل في حالة وجود عدد كبير من العناصر. تم التعديل في 13 فبراير بواسطة ياسر مسكين 1 اقتباس
0 Code Zero نشر 13 فبراير الكاتب أرسل تقرير نشر 13 فبراير طيب انا اسف انا عملتها كدا p.SPECIALIST_WORKED_BEFORE = string.Join(", ", lbx_work_history.Items.Cast<object>()); لو عايز استدعيها من الداتا بيز ارجعها الى اليست بوكس تانى علشان لو عايز اعدل فيها private void dataGridView1_SelectionChanged(object sender, EventArgs e) { try { //here id = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString()); var p = db.TBL_SPECIALIST.SingleOrDefault(x => x.SPECIALIST_ID == id); edt_name.Text = p.SPECIALIST_NAME.ToString(); edt_brith_date.Text = p.SPECIALIST_BIRTHDATE.ToString(); edt_age.Text = p.SPECIALIST_AGE_NOW.ToString(); edt_education.Text = p.SPECIALIST_EDUCATION.ToString(); edt_id_num.Text = p.SPECIALIST_ID_NUMBER.ToString(); edt_phone.Text = p.SPECIALIST_PHONE.ToString(); edt_address.Text = p.SPECIALIST_ADDRESS.ToString(); edt_active.Text = p.SPECIALIST_ACTIVE.ToString(); //listbox lbx_work_history.Items=p.SPECIALIST_WORKED_BEFORE.ToString(); 2 اقتباس
0 Mustafa Suleiman نشر 13 فبراير أرسل تقرير نشر 13 فبراير بتاريخ 3 ساعة قال Code Zero: طيب انا اسف انا عملتها كدا p.SPECIALIST_WORKED_BEFORE = string.Join(", ", lbx_work_history.Items.Cast<object>()); لو عايز استدعيها من الداتا بيز ارجعها الى اليست بوكس تانى علشان لو عايز اعدل فيها private void dataGridView1_SelectionChanged(object sender, EventArgs e) { try { //here id = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString()); var p = db.TBL_SPECIALIST.SingleOrDefault(x => x.SPECIALIST_ID == id); edt_name.Text = p.SPECIALIST_NAME.ToString(); edt_brith_date.Text = p.SPECIALIST_BIRTHDATE.ToString(); edt_age.Text = p.SPECIALIST_AGE_NOW.ToString(); edt_education.Text = p.SPECIALIST_EDUCATION.ToString(); edt_id_num.Text = p.SPECIALIST_ID_NUMBER.ToString(); edt_phone.Text = p.SPECIALIST_PHONE.ToString(); edt_address.Text = p.SPECIALIST_ADDRESS.ToString(); edt_active.Text = p.SPECIALIST_ACTIVE.ToString(); //listbox lbx_work_history.Items=p.SPECIALIST_WORKED_BEFORE.ToString(); على إفتراض أن هيكل قاعدة البيانات لديك هو حقل واحد لسجل العمل أي SPECIALIST_WORKED_BEFORE هو حقل VARCHAR/Text واحد يخزن جميع عناصر سجل العمل كسلسلة مفصولة بفواصل، وتريد تحرير تلك العناصر مباشرة داخل ListBox، سيكون الكود كالتالي: private void dataGridView1_SelectionChanged(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { try { int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString()); var p = db.TBL_SPECIALIST.SingleOrDefault(x => x.SPECIALIST_ID == id); if (p != null) { string workHistoryString = p.SPECIALIST_WORKED_BEFORE; // تقسيمها إلى مجموعة من السلاسل لعرضها في ListBox lbx_work_history.Items.Clear(); lbx_work_history.Items.AddRange(workHistoryString.Split(',').Select(s => s.Trim()).ToArray()); // تمكين التحرير إذا لزم الأمر lbx_work_history.Enabled = true; // اختياري: إضافة زر "حفظ التغييرات" لكتابة العناصر التي تم تحريرها مرة أخرى إلى قاعدة البيانات } else { lbx_work_history.Items.Clear(); lbx_work_history.Enabled = false; // معالجة عدم العثور على أي متخصص } } catch (Exception ex) { } } } private void lbx_work_history_SelectedIndexChanged(object sender, EventArgs e) { if (lbx_work_history.SelectedIndex >= 0) { // معالجة تحرير أو حذف العنصر المحدد } } أو تنفيذ جدول سجل عمل منفصل، أي يوجد جدول منفصل (مثل TBL_WORK_HISTORY) مرتبط بـ TBL_SPECIALIST (مثل SPECIALIST_ID) لتخزين إدخالات سجل العمل الفردية، وعرض وتحرير تلك الإدخالات في شبكة/عرض بيانات. وكمثال لمخطط قاعدة البيانات: CREATE TABLE TBL_SPECIALIST ( SPECIALIST_ID INT PRIMARY KEY, ... (other specialist fields) ); CREATE TABLE TBL_WORK_HISTORY ( WORK_HISTORY_ID INT PRIMARY KEY, SPECIALIST_ID INT FOREIGN KEY REFERENCES TBL_SPECIALIST(SPECIALIST_ID), WORK_HISTORY_DESCRIPTION VARCHAR(255) ); ثم تنفيذ الكود: private void dataGridView1_SelectionChanged(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { try { int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString()); var p = db.TBL_SPECIALIST.SingleOrDefault(x => x.SPECIALIST_ID == id); if (p != null) { // تحميل سجل العمل من جدول منفصل var workHistory = db.TBL_WORK_HISTORY.Where(x => x.SPECIALIST_ID == id).ToList(); // عرض سجل العمل في DataGridView dgv_work_history.DataSource = workHistory; // تكوين DataGridView حسب الحاجة (أعمدة، قابلية التحرير، إلخ) // تمكين التحرير إذا لزم الأمر dgv_work_history.Enabled = true; } else { // معالجة عدم العثور على أي متخصص } } catch (Exception ex) { } } } // معالجة حفظ التغييرات التي تم إجراؤها على سجل العمل (إضافة/تعديل/حذف) private void btn_save_work_history_Click(object sender, EventArgs e) { // استرداد التغييرات من DataGridView var workHistoryChanges = ... // استخدم آلية مناسبة لجمع التغييرات من DataGridView // تحديث قاعدة البيانات foreach (var change in workHistoryChanges) { // ... } // تحديث DataGridView لعرض التغييرات // ... } وعليك تكوين dgv_work_history بشكل صحيح لعرض سجل العمل (ربط البيانات، الأعمدة، إلخ)، حيث ستحتاج إلى آلية مناسبة لجمع التغييرات من dgv_work_history (مثل استخدام مجموعات البيانات المُدارة أو كائنات DTO). 1 اقتباس
0 Code Zero نشر 13 فبراير الكاتب أرسل تقرير نشر 13 فبراير private void dataGridView1_SelectionChanged(object sender, EventArgs e) { try { //here id = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString()); var p = db.TBL_SPECIALIST.SingleOrDefault(x => x.SPECIALIST_ID == id); edt_name.Text = p.SPECIALIST_NAME.ToString(); edt_brith_date.Text = p.SPECIALIST_BIRTHDATE.ToString(); edt_age.Text = p.SPECIALIST_AGE_NOW.ToString(); edt_education.Text = p.SPECIALIST_EDUCATION.ToString(); edt_id_num.Text = p.SPECIALIST_ID_NUMBER.ToString(); edt_phone.Text = p.SPECIALIST_PHONE.ToString(); edt_address.Text = p.SPECIALIST_ADDRESS.ToString(); edt_active.Text = p.SPECIALIST_ACTIVE.ToString(); // LISTBOX SelectionChanged lbx_work_history.Items.Clear(); string[] workHistoryArray = p.SPECIALIST_WORKED_BEFORE.Split(','); foreach (string item in workHistoryArray) { lbx_work_history.Items.Add(item.Trim()); } lbx_Specialization.Items.Clear(); string[] Specialization = p.SPECIALIST_Specialization.Split(','); foreach (string item in Specialization) { lbx_Specialization.Items.Add(item.Trim()); } lbx_work_time.Items.Clear(); string[] WORKING_DAYES = p.SPECIALIST_WORKING_DAYES.Split(','); foreach (string item in WORKING_DAYES) { lbx_work_time.Items.Add(item.Trim()); } edt_salary_type.Text = p.SPECIALIST_SALARY_TYPE.ToString(); edt_salary_amount.Text = p.SPECIALIST_SALARY_AMOUNT.ToString(); edt_salary_time.Text = p.SPECIALIST_SALARY_TIME.ToString(); //p.ADDED_BY = //p.BRANCH_NAME= } catch (Exception) { return; } جزاكم الله خيرا اخى مصطفى هذا الطريقة عملت على الوجه الامثل اقتباس
السؤال
Code Zero
السلام عليكم عندى ليست بوكس به اكثر من بيان اريد اضافة محتويات اليست بوكس الى الداتا تابل
وهذا كود الاضافة وجزاكم الله خيرا
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.