PDA

View Full Version : سوال: this.DataBind و احتمال خالی کردن گریدویو



arash69
دوشنبه 05 خرداد 1393, 20:04 عصر
سلام به همه دوستان برنامه نویس.
سوالی در رابطه با this.DataBind در MasterPage داشتم؛
آیا امکان این هست که با اینکار توی MasterPage، گریدویو که در حالت PostBack بودن صفحه دیگه پرنمیشه، مقادیر قبلیشم از دست بده؟
ممنون میشم راهنمایی کنید.
------------------------------------------ حل شد -----------------------------------------------------------------------------------------------------

با توجه به تست هایی که انجام دادم؛ متوجه شدم که دقیقا این اتفاق داره میافته.
اما حالا سوالم اینه که چطوری میشه MasterPage رو this.DataBind کرد ولی این اتفاق نیفته؟

این تابع لود مستر پیج هست:

protected void Page_Load(object sender, EventArgs e)
{
fillPage();
this.DataBind();
}


این هم تابع لود صفحه ای هست که از مستر پیج استفاده میکنه و در واقع گریدویو رو پر میکنه:

protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dbcon1"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Products";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
con.Open();
da.Fill(ds);
con.Close();


if (!Page.IsPostBack)
{
products_table.DataSource = ds;
products_table.DataBind();
}
}


ممنون.

arash69
سه شنبه 06 خرداد 1393, 23:39 عصر
دوستان کسی در این زمینه اطلاعی نداره؟

fakhravari
چهارشنبه 07 خرداد 1393, 14:59 عصر
this.DataBind(); نیازی نیست

arash69
چهارشنبه 07 خرداد 1393, 18:51 عصر
this.DataBind(); نیازی نیست

این قطعه کد اگه نباشه، کلا" سیستم اخبار سایتی که در سمت راست هر صفحه نشون میدم، از کار میافته و نمایش داده نمیشه و به همین خاطر نیاز هست. بازم ممنون از وقتی که گذاشتین.

fakhravari
چهارشنبه 07 خرداد 1393, 20:13 عصر
چون استاتیک نیست شاید خالی بشه.
این بهتره
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dbcon1"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Products";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
con.Open();
da.Fill(ds);
con.Close();


products_table.DataSource = ds;
products_table.DataBind();

}
}

arash69
چهارشنبه 07 خرداد 1393, 21:16 عصر
چون استاتیک نیست شاید خالی بشه.
این بهتره
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dbcon1"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Products";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
con.Open();
da.Fill(ds);
con.Close();


products_table.DataSource = ds;
products_table.DataBind();

}
}

قطعه کدی که گذاشتین بهینه تر هست، اما آیا این باعث میشه تا اون مشکل گفته شده پیش نیاد؟

arash69
چهارشنبه 07 خرداد 1393, 21:36 عصر
--------------------- حل شد --------------------------------------------------------------------------------------

با قرار دادن DataBind موجود در تابع load از masterPage، در داخل شرط postBack نبودن صفحه، مشکل حل شد.
به شکل زیر:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
fillPage();
this.DataBind();
}
}

fakhravari
چهارشنبه 07 خرداد 1393, 22:12 عصر
در کل چون در پستبک view state حفظ میشه داده ها از بین نمیرن