تغيير التحديد مربع القائمة لا يتحرك التغييرات من BindingSource إلى مجموعة البيانات

StackOverflow https://stackoverflow.com/questions/609052

سؤال

والجواب على هذا السؤال قد تتحول إلى أن تكون "لا تستخدم وحدات DataSet كتابة دون استخدام المستكشف ملزم". أنا الغريب، ومع ذلك، حول سلوك اراه.

وهكذا، أنا خلق نموذج حيث تم جره كل عنصر تحكم من المستكشف مصادر البيانات. أنا حذفت المستكشف ملزم لأنه هو قبيح وغير مناسب لهذا شكل معين. وأضاف لي مربع القائمة وتحديد مصدر البيانات إلى BindingSource.
لاحظ أن ليست ملزمة مربع القائمة، انها مجرد ملء نفسها من BindingSource. من قبل بعض السحر الذي لم أكن أعول، يتحرك في ListBox والتنقل في BindingSource وكافة عناصر التحكم الأخرى تقوم بتحديث وفقا لذلك.

ويمكنني إجراء تغييرات على عناصر تحكم منضمة وتدعو صراحة EndEdit على BindingSource ثم تحديث مصدر البيانات من خلال محول الجدول. يعمل كبيرة.

وعندما إجراء تغييرات في عناصر تحكم منضمة ثم انقر على خيار جديد في مربع القائمة، أريد أن أكون قادرة على التحقق من وجود تغييرات وموجه إلى حفظ أو إعادة إذا كان هناك أي.

وهنا هو الجزء الغريب أن لم أكن قادرا على معرفة.

وبغض النظر عما حدث أوليها ل، DataSet.HasChanges لا يرجع صحيح حتى تغيير مربع القائمة الثانية. لقد فتشت وحاول العشرات من الاقتراحات، ومعظمهم من السخرية، ولكن عدد قليل الذي بدا واعدا. لا حظ.

وتحرير: ليس النقرة الثانية التي أمر مهم، فمن عند النقر فوق مرة أخرى على (تحرير) العنصر الأصلي

.
هل كانت مفيدة؟

المحلول

ومنذ طرح السؤال، وتعلمت أكثر قليلا عن BindingSources ومجموعات البيانات وTableAdapters.

وهنا هو ما يعمل:

    private void MyListBox_Click(object sender, EventArgs e)
    {
        this.myBindingSource.EndEdit();
        if (myDataSet.HasChanges())
        {
            if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                myTableAdapter.Update(myDataSet.myDataTable);
            }
            else
            {
                myDataSet.RejectChanges();
            }
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top