PDA

View Full Version : Insert کردن در DGV از یک صفحه دیگر



bahane274
یک شنبه 21 شهریور 1389, 02:49 صبح
سلام !
من میخوام با زدن یک دکمه در صفحه ای که DataGridView ام توش قرار گرفته صفحه دیگری showdialog شده و در آنجا اطلاعات مورد نظرم را جهت insert کردن به DGV ، درون تکس باکسها بنویسم.
اما با وارد کردن اطلاعات و زدن دکمه save و خروج از پنجره فرزند، اطلاعات جدید در DGV نمایش داده نمیشه.
آیا باید کد مربوط به آپدیت کردن رو یه جایی بنویسم که بعد از بسته شدن فرم فرزند ،اون کد اجرا بشه وDGV آپدیت شه؟ اگه آره کجا و اگه نه راهنمایی ؟
اینم کد دکمه save:





strSql = "select * from sepordeha";
con = new SqlConnection(Form1.strcon);
con.Open();
da = new SqlDataAdapter(strSql, con);
da.Fill(ds, "sepordeha");
con.Close();


newrow = ds.Tables["sepordeha"].NewRow();
newrow["ShomareRadif"] = Convert.ToInt32(TextBox38.Text);
.
.
.

ds.Tables["sepordeha"].Rows.Add(newrow);
cb = new SqlCommandBuilder(da);
da = cb.DataAdapter;
da.Update(ds, "sepordeha");
con.Close();
this.Close();

bahane274
یک شنبه 21 شهریور 1389, 10:58 صبح
سلام !
تورو خدا یکی جواب منو بده!:افسرده:

flash118
یک شنبه 21 شهریور 1389, 11:43 صبح
با سلام
دوست عزیز چون شما با انک اطلاعاتی کار میکنید کارتون خیلی راحت تر شده و به راحتی به جوابتون نزدیک می شید چون فعلا سر ارسال مقدار از فرم اول به دوم هنوز به جواب بهینه نرسیدیم من از بیان راهکار به این صورت طرف نظر میکنم و اگه اجازه بدید زمانی که روشن بهینه رو حل کرید اگه مشتاق بودین براتون میگم
اما روش بهینه که گفتم شما در فرم دوم دکمه سیو دارید خوب دادهاتون رو که وارد کردین یا ویرایش کردین یا هر چی می خواهید با زدین دکمه سیو این داده ها در درون دیتا گرید ویو فرم اول یا والد برور رسانی بشه و دوست عزیز تنها نوشتن :


dv.update();

کارتون تکمیل نمی شه در ادامه کدشو خدممتون میگم خوب جالا دو روش برای فرم دوم داریم
یکی این که اطلاعات قبلی جدوال رو کلا پاک کنید و بعدا با استفاده از یه حلقه for رکورد به رکورد وارد جدوال کنید
راه دوم:
اینه که باز با forاز اول برسی کنید اگه اطلاعات بود در جدولتون بروز رسانی کنید و اگه نبود insert کنید که اونم با یه if ساده امکان پذیر هست
به نظر من که روش اول خوب هست بازم انتخاب با شما
خوب کد زیر برای دکمه سیو قرار بدید دقت کنید که من فیلد جدولم شامل idوname هست شما هم باید متناسب با فیلد جدولتون تغییرات اعمال کنید


int id;
string name;
for (int i = 0; i <= mydg.RowCount - 2; i++)
{
id = int.Parse(mydg["id", i].Value.ToString());
name = mydg["name", i].Value.ToString();

connec.Open();
comm.CommandText = "select count(*) from tblstudent" +
" where ID=" + id + "";
int m = int.Parse(comm.ExecuteScalar().ToString());
if (m > 0)
{
comm.CommandText = "Update tblstudent set name='" + name + "' where id=" + id + " ";
comm.ExecuteNonQuery();
}
else
{
comm.CommandText = "insert into tblstudent(id,name)values(" + id + ",'" + name + "')";
comm.ExecuteNonQuery();
}
connec.Close();
}

خوب اما مشکل اصلی شما که در بروز رسانی دیتا گرید ویو فرو اول یا همان والد هست
میتونید از رویداد فرو activeاستفاده کنید و کد های زیر رو درون یه متد قرار بدید و بعد تو رویداد فرم فراخوانی کنید


private void UpdateDG()
{

connec.Open();
comm.Connection = connec;
comm.CommandText = "select ID,SName,Cname from vwstudent";
ds.Clear();
da.SelectCommand = comm;
da.Fill(ds, "mytable");
connec.Close();
dg.Update();
for (int i = 0; i <= dg.RowCount - 2; i++)
dg[0, i].Value = i + 1;

}


خوب حالا کافیه که متد UpdateDG() رو تو رویداد فرم فراخوانی کنید

bahane274
یک شنبه 21 شهریور 1389, 15:16 عصر
من توی insert کردن و edit کردنش مشکلی ندارم یعنی با کدی که نوشتم این کارها به درستی انجام میشه فقط با زدن دکمه ذخیره و بسته شدن فرم فرزند ، تغییرات توی DGV نمایش داده نمیشه که البته طبیعی هم هست چون من کد آپدیت شدن دیتاگریدویو رو فقط تو " فرم لود " نوشتم. توی Form_Actived هم نوشتم که جواب نداد.
در ضمن من از طریق تکس باکس insert و Edit ام رو انجام میدم نه تو خود DGV.مثلا میگم:



newrow["ShomareRadif"] = Convert.ToInt32(TextBox38.Text);


حالا میخوام بدونم کد آپدیت شدن DGV رو کجا بنویسم که وقتی فرم فرزند بسته شد اون اجرا بشه؟