الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة: عدم تحديث الداتابيز بعد الـbinding

مغلقمُجاب
بدأه aohammed في 4 أبريل 2013 · 3 رد · 1,164 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني,

أخوكم في ورطة, عليه تسليم مشروع برمجي بعد فترة قريبة, و حدثت مشكلة..

ألا و هي, أن المستخدم بعد الانتهاء من تعديل بيانات بـForm التعديل, لا تتعدل البيانات في الداتابيز!

 

المشكلة أنني متأكد تماماً أن البيانات تصبح محدّثة وقت التعديل, و الدليل أن المستخدم حينما يرجع للوراء بالضغط على previous يرى بياناته المحدّثة

و لكن! .. حينما يخرج من الفورم, تصبح البيانات كلها صفر "ماعدا الـID-key-"

 

سأضع لكم الكود مختصراً لتوضيح كيف عملت الـbinding

 

ملاحظة: أنا أعلم أنني لو وضعت query update سيحدث ما أريد,

لكن أليست الbinding للعرض و التحديث أيضاً ؟!! فكيف تُعرض البيانات المحدّثة للمستخدم عند التراجع previous و لا تُعرض في النهاية بعد اغلاق الفورم؟!!!

 

namespace Sample
{

    public partial class Edit_thing : Form
    {
        SqlConnection cn = new SqlConnection(@"Connection_string");
        SqlCommand cmd = new SqlCommand();
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();
        BindingSource bs = new BindingSource();

        decimal total;
        int i = 0;
        public Edit_thing()
        {
            InitializeComponent();
        }


        public Edit_thing(decimal a)
        {
            InitializeComponent();
            total = a;
            int size1 = Convert.ToInt32(total);


        }
        private void Add_thing_Load(object sender, EventArgs e)
        {
            cmd.Connection = cn;
            cn.Open();
            da.SelectCommand = new SqlCommand("Select * From tb1", cn);
            ds.Clear();
            da.Fill(ds);
            bs.DataSource = ds.Tables[0];
      
            FC.DataBindings.Add(new Binding("Text", bs, "FC"));

            cn.Close();

            label6.Text = "type Number:   " + (bs.Position +1) +" of  " + total.ToString(); 
                
        }

        private void button1_Click(object sender, EventArgs e)
        {

            bs.MovePrevious();

            label6.Text = "type Number:   " + (bs.Position + 1) + " of  " + total.ToString();
            button_23.Text = "Next";
        }
        private void button_23_Click(object sender, EventArgs e)
        {
            
            bs.MoveNext();

            label6.Text = "type Number:   " + (bs.Position + 1) + " of  " + total.ToString();

            if (button_23.Text == "Finish")
                this.Close();
            if (bs.Position + 1 == total)
                button_23.Text = "Finish";
            }







        }
    }

جزاكم الله خيراً

#2

لا أدري إن كانت هذه المعلومة ستُحدث فرقاً .. لكن سأذكرها على أية حال,

و هي أنه قبل الدخول لفورم التعديل, وضعت هذين الأمرين كي أجعل الtable لا يحوي أية صفوف "داتا"

 

و لكي أجعل كل البيانات 0 "reset"

 

 

            cmd.Connection = cn;
            cn.Open();
            cmd.CommandText = "Delete from tb1";
            cmd.ExecuteNonQuery();
            for (int k = 1; k <= (int)NSTL.Value; k++)
            {
                cmd.CommandText = "insert into tb1 (IM,FS) values(" + k + ",0)";
                cmd.ExecuteNonQuery();
            }

            cn.Close();

حيث أن IM هو الـkey

تم تعديل هذه المشاركة بواسطة aohammed في 4 أبريل 2013 في 06:20

#3

كي أكون محدداً للمشكلة أكثر, بعد مراجعة الكود,

 

المشكلة تكمن في أنني أُحدث الـDataSet ds

فكيف سأطبق التغييرات التي حدثت إلى الداتابيز؟!

 

علماً أنني جربت هذه الطريقة,

            if (button_23.Text == "Finish")
            {
                this.bs.EndEdit();
                this.da.Update(ds.Tables[0]);
                this.Close();
            }

و لكن يظهر لي خطأ في سطر this.da.Update(ds.Tables[0]);

#4 أفضل إجابة

تم حل المشكلة و لله الحمد

 

لمن أراد حل المشكلة, فكما قلت سابقاً , المشكلة تكمن في أنني أجري التحديث على DataSet و ليس الداتابيز

 

و هذه هي السطور اللازمة بعد الانتهاء من تعديل كل الـDataSet , لكي يتم تحديث الـDataBase بشكل أتوماتيكي

 

            if (button_23.Text == "Finish")
            {
                this.bs.EndEdit();
                SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(da);
                this.da.Update(ds.Tables[0]);
                this.Close();
            }

هذا الموضوع مغلق.

مواضيع مشابهة