PDA

View Full Version : سوال: نمایش تغییرات در هنگام بازگشت از فرم درون گرید



neda_dela
جمعه 29 آبان 1388, 10:19 صبح
سلام دوستان
من دو تا فرم دارم که توی هر دوتاش گریدی دارم که به یه تیبل وصل شده یعنی هر دو تا اطلاعات مساوی نشون میدن
فرم 2 برای ویرایشه و فرم 1 برای درج
حالا می خوام وقتی ویرایش انجام میشه (که البته به درستی عمل می کنه) و از فرم 2 خارج شدم این تغییرات درون فرم 1 هم نشون داده بشه و مجبور به بستن و دوباره اجرا کردن برنامه نشم.
یه سری کارهایی با کمک دوستان انجام دادم اما جواب نگرفتم اینجا:
http://barnamenevis.org/forum/showthread.php?t=189381&page=2

AliRezaPro
جمعه 29 آبان 1388, 12:06 عصر
اگر شما عمل سلکت را در یک رویداد قرار دادید تا اطلاعات در گرید نشان داده شود کافی است که فقط آن رویداد را فراخوانی کنید
یعنی 2باره سلکت بزنید تا بتونید تغییرات را ببینید
مثلا من وقتی ویرایش کردم کار ویرایش به اتمام رسید یک بار آن قسمت کدی که مربوط به سلکت و نمایش بود را فراخوانی میکنم

neda_dela
جمعه 29 آبان 1388, 20:36 عصر
اگر شما عمل سلکت را در یک رویداد قرار دادید تا اطلاعات در گرید نشان داده شود کافی است که فقط آن رویداد را فراخوانی کنید
یعنی 2باره سلکت بزنید تا بتونید تغییرات را ببینید
مثلا من وقتی ویرایش کردم کار ویرایش به اتمام رسید یک بار آن قسمت کدی که مربوط به سلکت و نمایش بود را فراخوانی میکنم
دوست عزیز از پاسختون ممنون
در این که دستور سلکت تیبل رو بازخوانی می کنه شکی نیست اما مشکل من همین دو فرمه بودن برنامه هست من این دستورات رو هر جا که می ذارم نتیجه نمی گیرم
گفتم که من دو تا فرم دارم و توی هر دو تاش گرید دارم که هر دو گرید به یه تیبل متصل شده حالا دستور سلکت توی یه فرم جواب میده مثلا من توی فرم دومم وقتی که کار ویرایش تموم میشه برای اینکه رکورد هایی رو که تغییر کردن با تغییراتش نماش بدم سلکت کردم
حالا می خوام از فرم 2 خارج بشم و همین تغییرات رو توی فرم 1 ببینم که با دستور سلکت هم درست نشد.:ناراحت::افسرده:
من این دستورات رو باید کجا بذارم
من یه متغیر از نوع فرم 1 توی فرم 2 می سازم و حالا دستورات رو توی رویداد کلیک دکمه خروج فرم 2 ، بعد از ثبت تغییرات در بانک توی فرم 2 یا بهتره بگم تو رویداد کلیک دکمه ثبت، توی رویداد form closing، توی رویداد form closed، توی لود خود فرم 1 ، خلاصه همه جا امتحان کردم دیگه نمی دونم چی کار کنم
بچه ها خواهشا کمک

h.jaza
جمعه 29 آبان 1388, 21:30 عصر
من یه متغیر از نوع فرم 1 توی فرم 2 می سازم و حالا دستورات رو توی رویداد کلیک دکمه خروج فرم 2 ، بعد از ثبت تغییرات در بانک توی فرم 2 یا بهتره بگم تو رویداد کلیک دکمه ثبت، توی رویداد form closing، توی رویداد form closed، توی لود خود فرم 1 ، خلاصه همه جا امتحان کردم دیگه نمی دونم چی کار کنم
من این تیکه رو درست متوجه نشدم؛ آخرش نفهمیدم از کی کجا نمونه ساختی و کجا صدا زدی و اینا...
راه حلی که باید استفاده بشه اینه که مثلا در فرم اصلی یه نمونه از فرم ثانویه می سازی و بعد داخل اونجا کارای ویرایشی و اینا رو انجام بدی بعد، بعد از بسته شدن این فرم در ادامه ی کدات گرید فرم دوم رو آپدیت می کنی...

آیا روشی که استفاده کردی همینه یا چیز دیگه هست؟؟؟

neda_dela
جمعه 29 آبان 1388, 23:11 عصر
من این تیکه رو درست متوجه نشدم؛ آخرش نفهمیدم از کی کجا نمونه ساختی و کجا صدا زدی و اینا...
راه حلی که باید استفاده بشه اینه که مثلا در فرم اصلی یه نمونه از فرم ثانویه می سازی و بعد داخل اونجا کارای ویرایشی و اینا رو انجام بدی بعد، بعد از بسته شدن این فرم در ادامه ی کدات گرید فرم دوم رو آپدیت می کنی...

آیا روشی که استفاده کردی همینه یا چیز دیگه هست؟؟؟
من به طرق مختلف گریدم رو آپدیت کردم

datagridview1.update();
و یا عمل refresh رو انجام دادم همچنین سلکت رو
ببین دوباره توضیح میدم
من دو تا فرم دارم 1 و 2 . توی هر دو تاش گرید دارم که به یه تیبل وصل هستن یعنی هر دو اطلاعات مساوی رو نشون میدن
حالا از طریق منوی موجود در فرم 1 به فرم 2 میرم تا بتونم رکوردی رو ویرایش کنم .
از گرید فرم 2 یه رکورد رو انتخاب می کنم. با این کار اطلاعات اون رکورد برای ویرایش توی کنترل هایی که پایین صفحه برای هر فیلد قرار دادم ظاهر میشه و من می تونم اونجا تغییرات رو اعمال کنم و بعدش دکمه ثبت رو می زنم . اطلاعات تغییر یافته توی گرید فرم 2 نشون داده میشه.
خب بعدش دکمه خروج رو می زنم (خروج از فرم 2 و برگشت به فرم 1)تا دوباره به فرم 1 برگردم وقتی که برمی گردم تغییرات توی گرید فرم 1 نشون داده نمیشه باید دوباره برنامه رو اجرا کنم تا نشون بده

در فرم اصلی یه نمونه از فرم ثانویه می سازی
منظورت همون ساختن یه متغیر از یه فرم خاصه این طوری؟

form1 frm=new form1();

AliRezaPro
شنبه 30 آبان 1388, 00:02 صبح
من تجربه ی زیادی در برنامه نویسی ندارم ولی :
شما باید فرم یک رو متوجه کنید که الان فرم 2 بسته شده و در واقع ویرایش شده و شما باید یک بار دیگر سلکت بزننید
خوب به نظر من یه توکن (Token)مشکلتو حل میکنه یعنی فرم اول رو متوجه خروج اون کن و بعد یه سلکت از داخل همون فرم بزن
فرض:
شما دو فرم دارید در فرم اول یک باتن دارید که شما رو به فرم دوم هدایت میکند و داخل فرم دوم هم یک TextBox و یک دکمه دارید
شما در رویداد لود فرم اول اطلاعات مربوط به پر شدن دیتاست و انتقال آن به دیتاگرید را دارید
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("server=(local);database=Library;trusted_connection =yes");
SqlDataAdapter da = new SqlDataAdapter("select * from RegisterUser", conn);
DataSet ds = new DataSet();
da.Fill(ds, "RegisterUser");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "RegisterUser";
}
در قسمت کلاس فرم اول یک متغیر Private از نوع bool تعریف کنید و مقدار آن را برابر false کنید
private bool SelectionToGrid = false;
شما قسمت کانترکشن فرم اول را بدین شکل در بیاورید
public Form1(bool Vi )
{
InitializeComponent();

if (Vi == true) this.SelectionToGrid = true;
}
خوب حالا در رویداد Activate فرم اول این کد را درج کنید
private void Form1_Activated(object sender, EventArgs e)
{
if (this.SelectionToGrid == true)
Form1_Load(sender, e);
}
حالا باتن را کلیک کنید تا به فرم دوم هدایت شوید
در این قسمت هم مثل قبلی دیتا ست را پر کنید
و در باتن کد های مربوط به ویرایش را بنویسید و در آخر کد مربوط به سلکت دوباره را قرار دهید (به رنگ قرمز دقت کنید)
private void button1_Click(object sender, EventArgs e)
{
SqlCommand com = new SqlCommand();
com.Connection = conn;
com.CommandType = CommandType.Text;
com.CommandText = "update RegisterUser set FirstName=N'" + textBox1.Text + "' where ID='" + id + "'";
conn.Open();
com.ExecuteNonQuery();
conn.Close();
Form2_Load(sender, e);
}
در رویداد FormClosing این فرم این کد را بنویسید
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
Form1 f = new Form1(true);
}
جاهایی رو که بهش اشاره نکرم فرض بر این بود که بلدید
فکر کنم همه جا رو توضیح دادم

h.jaza
شنبه 30 آبان 1388, 09:13 صبح
man7tomani@
خیلی پیچوندیش و سختش کردی...
کار شاقی که نمی خواد انجام بشه، فقط توی فرم یک باید یه بار دیگه سلکت رو انجام بده:



//In Form1's Button's Event
Form2 frm2 = new Form2();
frm2.ShowDialog();
//After Submitting In Form2, Now Update Form1's Grid
dataGridView1.DataSource = ...


شما همچین کاری کردی و نشده؟؟؟ یا روش دیگه؟

AliRezaPro
شنبه 30 آبان 1388, 09:19 صبح
ایشون میخوان وقتی فرم دوم بسته شد فرم اول آپدیت بشه نه وقتی که فرم دوم رو Show کردی
کجاش سخت بود؟

h.jaza
شنبه 30 آبان 1388, 11:00 صبح
اینم همینه دیگه...
فرم دوم رو نشون میده، تا زمانی که فرم دوم فعاله که هیچ، همون دستورات داخل فرم دو اجرا میشه، بعد از اینکه فرم دوم بسته شد، دستور بعد از ShowDialog نوشته شده در فرم اول اجرا میشه که همون آپدیت کردن گریدش هست...

کجاش سخت بود؟
نظر شخصی بود...

hamidsolat
شنبه 30 آبان 1388, 12:34 عصر
فکر میکنم شما فرم2 رو show() میکنید با این کار در فرم1 بعد از انجام این دستور دستورات بعدی اجرا میشه و بعد از خرج شدن از فرم2 نمیدونید کنترل کجاست که بخواهید دیتاگرید رو رفرش کنید. بهتره به جای استفاده از Show() از ShowDialog() استفاده کنید به این صورت:
Form2 f=new Form2();
f.ShowDialog();
dataGridView.Refresh();

neda_dela
شنبه 30 آبان 1388, 14:20 عصر
دوستان از همه متشکرم
مشکل من فقط پیدا کردن جایی بود که بتونم اونجا کدهام رو بزارم که پیداش کردم
از همه ممنون