افزونه 1 به روز رسانی اطلاعات بایند شده ی کمبوباکس از یک فرم دیگر

kern

Member
سلام.
تو برنامه ای که دارم مینویسم (C#) گاهی وقتا نیاز میشه که از داخل یه Form فعال یه Form دیگه رو باز کنم و اطلاعاتی به پایگاه داده اضافه کنم. اطلاعات همین پایگاه داده به یک comboBox تو فرم اول ریخته شده.
میخوام بعد از اینکه Form دوم بسته شد اطلاعات comboBox به روز رسانی بشه و داده های جدید هم تو لیست نمایش داده بشه. البته فیلد های قبل از comboBox نباید از دست برن.

attachment.php


با توجه به عکس بالا؛ مثلا نام کالاوارد میشه، واحد شمارش انتخاب میشه ولی برند مورد نظر تو لیست مرتبط وجود نداره !!! کاربر با کلیک روی اضافه اون گزینه رو اضافه میکنه و پس بستن اونو انتخاب میکنه. (اطلاعات فیلدهای نام کالا و واحد شمارش نباید از دست برن)
در ضمن comboBox ها رو از طریق ویزارد بایند کردم و از LINQ استفاده میکنم!
 

پیوست ها

  • 1.png
    1.png
    4.6 کیلوبایت · بازدیدها: 14
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام.
تو برنامه ای که دارم مینویسم (C#) گاهی وقتا نیاز میشه که از داخل یه Form فعال یه Form دیگه رو باز کنم و اطلاعاتی به پایگاه داده اضافه کنم. اطلاعات همین پایگاه داده به یک comboBox تو فرم اول ریخته شده.
میخوام بعد از اینکه Form دوم بسته شد اطلاعات comboBox به روز رسانی بشه و داده های جدید هم تو لیست نمایش داده بشه. البته فیلد های قبل از comboBox نباید از دست برن.

ComboBox مورد نظرتون داده ها رو از منبع داده ای که تو مشخصه DataSource اش تعیین میشه می خونه، اگه منبع داده رو ازش بگیرید و مجددا بهش بدید خودش رو Refresh می کنه.
کد:
            object ds = [B][COLOR="#0000FF"]comboBox1[/COLOR][/B].DataSource;
            [B][COLOR="#0000FF"]comboBox1[/COLOR][/B].DataSource = null;
            [B][COLOR="#0000FF"]comboBox1[/COLOR][/B].DataSource = ds;
 

kern

Member
ComboBox مورد نظرتون داده ها رو از منبع داده ای که تو مشخصه DataSource اش تعیین میشه می خونه، اگه منبع داده رو ازش بگیرید و مجددا بهش بدید خودش رو Refresh می کنه.
کد:
            object ds = [B][COLOR=#0000FF]comboBox1[/COLOR][/B].DataSource;
            [B][COLOR=#0000FF]comboBox1[/COLOR][/B].DataSource = null;
            [B][COLOR=#0000FF]comboBox1[/COLOR][/B].DataSource = ds;

خوب اینو کجا باید بنویسم. تو Form Load و یکی دو جای دیگه امتحان کردم نشد. اطلاعات جدول از فرم2 به روز میشه ولی کمبوباکس ها تو فرم1 هستن... چه جوری بلافاصله بعد از بسته شدن فرم2، کمبوهای Form1 به روز بشن؟!
 
آخرین ویرایش:

the_king

مدیرکل انجمن
خوب اینو کجا باید بنویسم. تو Form Load و یکی دو جای دیگه امتحان کردم نشد. اطلاعات جدول از فرم2 به روز میشه ولی کمبوباکس ها تو فرم1 هستن... چه جوری بلافاصله بعد از بسته شدن فرم2، کمبوهای Form1 به روز بشن؟!

ببینید فرم 2 رو در کد فرم 1 چطوری نمایش می دهید.

اگه فرم 2 رو با متد ShowDialog باز می کنید، تا زمانی که فرم 2 بسته نشده اجرای دستورات بعدی فرم 1 متوقف میشه، پس کد ها رو درست بعد از ShowDialog درج کنید که به محض بسته شدن فرم 2 اجرا بشوند :
کد:
            using (Form2 f2 = new Form2())
            {
                f2.ShowDialog();
            }
[B][COLOR="#0000FF"]            object ds = comboBox1.DataSource;
            comboBox1.DataSource = null;
            comboBox1.DataSource = ds;
[/COLOR][/B]

اگر فرم 2 رو با متد Show نمایش می دهید، باید از طریق کد های همون فرم 2 اینکار رو انجام دهید، ابتدا در فرم 1 اون ComboBox مورد نظر رو انتخاب کنید، یک مشخصه Modifiers داره که پیشفرض اش
Private ئه، به Public تغییرش دهید تا فرم 2 بتونه اونرو در فرم 1 پیدا کنه. اگه Private بمونه چیزی به نام Form1.comboBox1 پیدا نمیشه.
بعد از اینکه تغییرات داده ای در فرم 2 انجام شد این کد رو پشت سرش در فرم 2 اجرا کنید :
کد:
[COLOR="#A9A9A9"]            // Update here[/COLOR]
[B][COLOR="#0000FF"]            Form1 f1 = Application.OpenForms["Form1"] as Form1;
            object ds = f1.comboBox1.DataSource;
            f1.comboBox1.DataSource = null;
            f1.comboBox1.DataSource = ds;
[/COLOR][/B]
 

kern

Member
روش اول معقول تره، منم از اون استفاده کردم.

ولی بعد از به روز رسانی، داده ای که ذخیره شده و بقیه ی داده های جدول نمایش داده نمیشه و مقدار System.Data.DataRowView نمایش داده میشه.
(توی جدول داده ای که وارد کردم درج میشه و فقط نمایش مشکل داره)
attachment.php
 

پیوست ها

  • err.png
    err.png
    7.5 کیلوبایت · بازدیدها: 11

the_king

مدیرکل انجمن
روش اول معقول تره، منم از اون استفاده کردم.

ولی بعد از به روز رسانی، داده ای که ذخیره شده و بقیه ی داده های جدول نمایش داده نمیشه و مقدار System.Data.DataRowView نمایش داده میشه.
(توی جدول داده ای که وارد کردم درج میشه و فقط نمایش مشکل داره)
attachment.php

روی فرم تون BindingSource و DataAdapter دارید؟ یک نگاهی به رخداد (Form1_Load(object sender, EventArgs e اش بکنید، کدی شبیه به این هست :

کد:
            // TODO: This line of code loads data into the 'uniDataSet.Teachers' table. You can move, or remove it, as needed.
            this.[B][COLOR="#0000FF"]name[/COLOR][/B]TableAdapter.Fill(this.[B][COLOR="#0000FF"]name[/COLOR][/B]DataSet.[B][COLOR="#0000FF"]Name[/COLOR][/B]);

مشابه اش رو در کد تون لازم دارید :
کد:
            using (Form2 f2 = new Form2())
            {
                f2.ShowDialog();
            }
            this.[B][COLOR="#0000FF"]name[/COLOR][/B]DataSet.Clear();
            this.[B][COLOR="#0000FF"]name[/COLOR][/B]TableAdapter.Fill(this.[B][COLOR="#0000FF"]name[/COLOR][/B]DataSet.[B][COLOR="#0000FF"]Name[/COLOR][/B]);
            ((BindingSource)comboBox1.DataSource).ResetBindings(false);
 

جدیدترین ارسال ها

بالا