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

DataBinding و الـSave/Load مشكلة أرقتني !

بدأه aohammed في 4 يونيو 2013 · 5 رد · 728 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

أحبائي,

هناك مشكلة أرقتني و جعلتني لا أنام الليل .. و يجب تسليم المشروع قريباً باذن الله

 

لدي مشروع أعمل عليه, و شارفت على الانتهاء, و يجب إضافة خاصية Save/Load للمشروع

 

المشروع بأكمله يعتمد على داتابيز من نوع Sqlite إلا بعض الـtextboxes و غيرها من الcontrols

لذا .. خطر ببالي أن أربط بقية العناصر مع table جديد في الداتابيز كي أستفيد من خاصية الـbinding و أفعل خاصية الـsave load

 

سأضع قبسات من الكود:

 

في التابع البناء للفورم

 

        SQLiteConnection cn = new SQLiteConnection(@"Data Source="+ Var.pp + @"\Database.db;Version=3;");
            SQLiteCommand cmd = new SQLiteCommand();

            SQLiteDataAdapter da = new SQLiteDataAdapter();
            DataSet ds = new DataSet();
            BindingSource bs = new BindingSource();

        public Form1()
        {
        .........

            cmd.Connection = cn;
            cn.Open(); cmd.CommandText = "begin"; cmd.ExecuteNonQuery();
            cmd.CommandText = "delete from G_info"; cmd.ExecuteNonQuery();
            cmd.CommandText = "insert into G_info (ID_n, BSPRNT, DAMP, ...............) values (.......)";
            cmd.ExecuteNonQuery();
            cmd.CommandText = "end"; cmd.ExecuteNonQuery(); cn.Close();


            cn.Open(); cmd.CommandText = "begin"; cmd.ExecuteNonQuery();
            da.SelectCommand = new SQLiteCommand("Select * From G_info", cn);
            ds.Clear();
            da.Fill(ds);
            bs.DataSource = ds.Tables[0];
            NSO.DataBindings.Add(new Binding("Value", bs, "NSO"));
        ............
            cmd.CommandText = "end"; cmd.ExecuteNonQuery(); cn.Close();
    }

في زر الـSave

 

 

       private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            cn.Open();
            this.bs.EndEdit();
            SQLiteCommandBuilder mySQLiteCommandBuilder = new SQLiteCommandBuilder(da);
            mySQLiteCommandBuilder.GetUpdateCommand();
            da.UpdateCommand = mySQLiteCommandBuilder.GetUpdateCommand();
            this.da.Update(ds.Tables[0]);
            
            

            if (Var.Load_file == null)
            {
                SaveFileDialog a = new SaveFileDialog();
                a.FileName = title.Text;
                a.Filter = "Text File|* .db";
                if (a.ShowDialog() == DialogResult.OK)
                {
                    string path = a.FileName;
                    System.IO.File.Copy(Var.pp + "\\Database.db", path, true);

                }

                Var.Load_file = a.FileName;
            }
            else
            {

                    System.IO.File.Copy(Var.pp + "\\Database.db", Var.Load_file, true);
            }
            cn.Close();
        }

في الـload

 

  private void loadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            New1 result = new New1("Do you want to save changes to " + title.Text);
            DialogResult a = result.ShowDialog();
            if (a == DialogResult.Yes)
            {
                saveToolStripMenuItem_Click(sender, e);
            }
            if (a == DialogResult.OK)
            {
                saveAsToolStripMenuItem_Click(sender, e);
            }
            if (a == DialogResult.No)
            {
                //Var.Load_file = null;
                //Drop All Tables || copy orginal to temp ..
            }
            if (a == DialogResult.Cancel)
            {

            }

            OpenFileDialog a1 = new OpenFileDialog();
            a1.Filter = "Text File|* .db";
            if (a1.ShowDialog() == DialogResult.OK)
            {

                bs.ResumeBinding();
                Var.Load_file = a1.FileName;
                System.IO.File.Copy(Var.Load_file, Var.pp + "\\Database.db", true);
              //  cn.Open(); cmd.CommandText = "begin"; cmd.ExecuteNonQuery();
                //////////////////////////////////////
                
                da.SelectCommand = new SQLiteCommand("Select * From G_info", cn);
                ds.Clear();
                da.Fill(ds);
               // MessageBox.Show(ds.Tables[0].Rows[0].ToString());

                

}
#2

طبعاً مكان النقط (.......) هو أوامر متأكد منها و لكنها طويلة لذا لم أضعها, و أيضاً في عملية الـinsert .. هناك أكثر من 150 متغيير ..  ولا أظن أحدكم سيفرح برؤيتها :( ..

 

عملية الـsave تجري بشكل رائع !

 

و لكن في عملية الـ load .. الذي يحدث أنه في البداية .. العملية تجري بشكل صحيح

و لكن عندما يضغط المستخدم على load مرة ثانية لنفس الملف .. تصبح المعلومات شبه عشوائية! و تصبح العناصر فارغة! رغم أن الحقول في الداتابيز صحيحة 100% و لم تتغير ! فالمشكلة في عملية الـload و في عملية Resumebinding

تم تعديل هذه المشاركة بواسطة aohammed في 4 يونيو 2013 في 10:23

#3

راجع هذه المشاركة ربما تفيدك ولتحويل الكود من VB الي #C استخدم هذا الموقع http://www.developerfusion.com/tools/convert/vb-to-csharp/

 

درس :: عن طريقة الاتصال بقاعدة بيانات من نوع SQLite

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#4
محمد فؤاد تركي كتب:

راجع هذه المشاركة ربما تفيدك ولتحويل الكود من VB الي #C استخدم هذا الموقع http://www.developerfusion.com/tools/convert/vb-to-csharp/

 

درس :: عن طريقة الاتصال بقاعدة بيانات من نوع SQLite

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

لكن ما أريده هو كيفية عرض محتوى الداتابيز على العناصر بعد الـbinding

#5

الحمدلله, تم حل المشكلة :)

 

المشكلة كانت في ترتيب الأوامر في الـLoad

هذا هو الترتيب الصحيح

لا أدري بصراحة إن كان أحد هذا الأمرين ليس مهماً .. لكنني وضعتهم على سبيل الحيطة لا غير ..

 

اقتباس

                bs.ResetBindings(true);                 bs.ResumeBinding();

 

 

 

                da.SelectCommand = new SQLiteCommand("Select * From G_info", cn);
                ds.Clear();
                da.Fill(ds,"G_info");
               // MessageBox.Show(ds.Tables[0].Rows[0].ToString());

                bs.ResetBindings(true);
                bs.ResumeBinding();

 

 

بالمناسبة .. دعاء الوالدين مهم جداً في البرمجة :) ..

#6

الحمد لله على كل حال

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