PDA

View Full Version : مشکل در مورد ()window.open() , window.close



nokhod
شنبه 08 مهر 1385, 10:52 صبح
سلام.

من توی یه صفحه که اسمش رو می ذارم صفحه ی اصلی یه DataGrid دارم. یه ستون ویرایش بهش اضافه کردم و دستی اون رکورد رو ویرایش می کنم. از طریق CommandArgtment من ID اون ردیف رو فرستادم. بعد هم oncommand اون رو Edit گذاشتم:(ConDB نام تابعی هست که یه DataSet رو بعد از Select بر می گردونه)



public void Edit(object sender, CommandEventArgs e)
{
Session["QuestionID"] = e.CommandArgument;
ds = ConDB();
DataRow[] drFound = ds.Tables["tblQuestion"].Select("ID='" + Session["QuestionID"].ToString() + "'");
foreach(DataRow dr in drFound)
{
Session["Auther"] = dr["Auther"];
Session["Title"] = dr["Title"];
Session["Description"] = dr["Description"];
}
Response.Write("<script>window.open('NewQuestion.aspx?Do=EditQuestion', null, 'menubar=0, navigatebar=0, width=600, height=310, left=200, top=200')</script>");
}


تو صفحه ی پاپ آپ، با استفاده از این Session ها، DataBase رو ویرایش می کنم:



private void ibUpdate_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
SqlConnection con = new SqlConnection(Session["ConnectionString"].ToString());
string stUpdate = "UPDATE tblQuestion SET Title='" + txtTitle.Text + "' , Description='" + txtDescription.Text + "' WHERE ID='" + Session["QuestionID"].ToString() + "'";
SqlCommand comUpdate = new SqlCommand(stUpdate,con);
con.Open();
comUpdate.ExecuteNonQuery();
con.Close();
Response.Write("<script>window.close()</script>");
}


حالا چون DataBase ویرایش شده، باید بعد از Close شدن صفحه پاپ آپ، صفحه اصلی Refresh بشه. من چکار می تونم بکنم؟

Behrouz_Rad
شنبه 08 مهر 1385, 12:15 عصر
عرض شود که:
از اونجایی که شما هم داری اشتباه 99 درصد افراد دیگه رو مرتکب میشی و کاری که داری انجام میدی (ویرایش رکورد در پنجره ای مجزا)، عشق اکثر برنامه نویسان هست! یک توضیح اجمالی میدم.
پنجره هایی که توسط دستور window.open باز میشن، می تونن مقادیر خودشون رو از پنجره ی پدرشون دریافت کنن!
و این یعنی عدم نیاز به PostBack صفحه...
مسلما این کار با جاوا اسکریپت امکان پذیر هست و مستقیما به توانایی تو در کار با جاوا اسکریپت بر میگرده.
به عنوان مثال، اگر قصد داشته باشی که مقداری رو که در یک TextBox بر روی فرم پدر وجود داره، بر روی فرمی که با استفاده از دستور window.open باز شده نمایش بدی، به شکل زیر عمل کن:


var myForm = window.opener.document.forms[0];
document.write(myForm["myTextBox"].value);

opener به فرمی اشاره می کنه که باعث باز شدن پنجره ی جاری شده.
مسلما در این حالت نه نیازی به Session داری و نه نیازی به PostBack صفحه!

و اما قسمت دوم سوالت:
دقیقا همانند بخش اول عمل می کنی اما با کمی تفاوت!
کافیه در روال onunload صفحه فرزند، یک ارجا به یک Button که باعث ایجاد PostBack میشه به دست بیاری و روال click اش رو فراخونی کنی:


var myForm = window.opener.document.forms[0];
myForm["myButton"].click();

جالب بود! نه؟:چشمک:

موفق باشی.