اذهب إلى المحتوى

السؤال

نشر
                    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.

السلام عليكم عندى ليست بوكس به اكثر من بيان اريد اضافة محتويات اليست بوكس الى الداتا تابل

وهذا كود الاضافة وجزاكم الله خيرا

Recommended Posts

  • 0
نشر (معدل)

الكود الذي قدمته ناقص قليلا، وذلك لأنه يبدو أنك نسيت توجيه الليست بوكس إلى القيم التي تريد إضافتها إلى حقل `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 تحت الغطاء للأداء الأفضل في حالة وجود عدد كبير من العناصر.

تم التعديل في بواسطة ياسر مسكين
  • 0
نشر

طيب انا اسف  انا عملتها كدا

                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();

 

  • 0
نشر
بتاريخ 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).

  • 0
نشر
 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;
            }

جزاكم الله خيرا اخى مصطفى هذا الطريقة عملت على الوجه الامثل

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...