PDA

View Full Version : مشکل با Update Panel



araz_pashazadeh
چهارشنبه 11 شهریور 1388, 01:32 صبح
سلام..
من تو صفحه خودم یه form view دارم که مطالبی رو از دیتابیس بهش بایند کردم و داخل Update panel هم گذاشتم .... حالا اومدم از تایمر استفاده کردم و هر 5 ثانیه یک بار صفحه FromView رو عوض کردم تایمر هم داخل update Panel هست و مشکلی ندارم ... تا اینجا کار میکنه به درستی ولی مشکلش اینجاست که هر بار که تایمر کار میکنه Evente مربوط به صفحه (page_load) هم اجرا میشه ولی من نمیخوام این اتفاق بیافته.... به نظر شما راه کار چیه؟؟؟:عصبانی++:

araz_pashazadeh
جمعه 13 شهریور 1388, 01:17 صبح
یعنی کسی نیست کمکم کنه؟؟؟؟؟

خودم خیلی جستجو کردم راجع بهش ..... چیزی پیدا نکردم ....

behnam-s
جمعه 13 شهریور 1388, 01:43 صبح
سلام
تو این سوال همدردیم .من از این راه استفاده می کنم
در رویداد page_load چک کن ببین که این صفحه اگه فعال نبود اجرا بشه
مثلا اگه از multiview استفاده می کنی ، چک کن که این view خاص Active هست یا نه!
روش زیاد جالبی نیست ولی مشکلو حل می کنه

hamid1988
جمعه 13 شهریور 1388, 02:27 صبح
هر بار که تایمر کار میکنه Evente مربوط به صفحه (page_load) هم اجرا میشه ولی من نمیخوام این اتفاق بیافته.... به نظر شما راه کار چیه؟؟؟


<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
</asp:Timer>

araz_pashazadeh
جمعه 13 شهریور 1388, 16:48 عصر
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
</asp:Timer>



مرسی از جواب ولی من به جای اینکه trigger استفاده کنم آوردم تایمر رو گذاشتم داخل Update panel و فکر کنم فرقی هم نداره با triggers ها .... مشکل بازم هست ...... راه حل دیگه ای باید وجود داشته باشه .. نه؟؟؟
من راجع به thread ها هم جستجو کردم ولی باز به جواب نرسیدم .... همکاری کنین این مشکلو حل کنیم.

araz_pashazadeh
جمعه 13 شهریور 1388, 16:55 عصر
سلام
تو این سوال همدردیم .من از این راه استفاده می کنم
در رویداد page_load چک کن ببین که این صفحه اگه فعال نبود اجرا بشه
مثلا اگه از multiview استفاده می کنی ، چک کن که این view خاص Active هست یا نه!
روش زیاد جالبی نیست ولی مشکلو حل می کنه


همچنین مرسی از جواب شما ... این روش مشکل رو حل میکنه تقریبا ولی من داخل صفحه از multiview استفاده نکردم از PLACE HOLDERS و USER CONTROL ها استفاده میکنم و چون هر بار PAGE_LOAD اجرا میشه هر سری یک USER CONTROL در داخل PLACE HOLDER قرار میگیره و این کار باعث میشه من نتونم سایر EVENT ها رو اجرا کنم... در واقع صفحه میافته تو LOOP ... اینم بگم که از خاصیت PAGE.ISPOSTBACK! هم استفاده کردم بازم جواب نداده .... امیدم به همین سایته و راهنمایی اساتید گرامی..

araz_pashazadeh
یک شنبه 15 شهریور 1388, 02:02 صبح
چه جالب هیچ کس این مشکلو نداشته تا به حال .... اصلا کسی تا به حال تایمر استفاده کرده تو پروژه هاش ؟؟؟؟ فکر کنم اینجا داریم به آخر خط میرسیم جایی که دیگه هیچ کاری ساخته نیست از دستمون .... درسته؟؟؟
کسی Solution خاصی نداره ؟؟ پدرم در اومد انقد راجع به Thread , Timer جستجو کردم.......

als_1360
یک شنبه 15 شهریور 1388, 19:40 عصر
من زياد با اي اس پي كار نكردم
مي توني يه يوزر كنترل ايجاد كني و يك تابع توي اون تعريف كني براي كاري كه مي خواي انجام بدي
بعد تايمرت رو بزاري بيرون آپ ديت پنل و موقعي كه تايمر اجرا مي شه بره و اون تابع رو اجرا كنه .

araz_pashazadeh
دوشنبه 16 شهریور 1388, 01:13 صبح
من زياد با اي اس پي كار نكردم
مي توني يه يوزر كنترل ايجاد كني و يك تابع توي اون تعريف كني براي كاري كه مي خواي انجام بدي
بعد تايمرت رو بزاري بيرون آپ ديت پنل و موقعي كه تايمر اجرا مي شه بره و اون تابع رو اجرا كنه .

با تشکر از جواب شما دوست عزیز... ولی مشکل من اینه که هر بار event مربوط به تایمر (tick) اجرا میشه همرا با اون event مربوط به صفحه (Page_load) هم اجرا میشه من نمیخوام اون اجرا بشه فقط میخوام Timer_Tick اجرا بشه ...... راجع به اینکه گفتی داخل تابع بزارم همین کار رو انجام دادم ولی وقتی tick میخوره تایمر اول میاد page_load رو اجرا میکنه بعد تایمر کار میکنه ..... خیلی سوال جالبیه همین مشکل برا یه دوست عزیز تو سایت CodeProject به وجود اومده بود اونجا هم مثل اینجا تاپیکش بی جواب مونده بود... به هر حال بازم منتظر جواب دوستان هستم..

hamid1988
دوشنبه 16 شهریور 1388, 10:01 صبح
فکر نکنم راه حلش به این سختی ها باشه، پروژتون رو بزارید تا بررسی شه!

araz_pashazadeh
سه شنبه 17 شهریور 1388, 00:41 صبح
فکر نکنم راه حلش به این سختی ها باشه، پروژتون رو بزارید تا بررسی شه!

این از کد html



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="c#" Inherits="cs_database_horizontal" CodeFile="~/default.aspx.cs" %>
<html>
<head id="Head1" runat="server">
<title>کیومرث زینال زاده</title>
</head>
<body style=" margin-top:10px;" bgcolor="#4A5B79">

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<table align="center" style="margin:0px auto auto auto; height: 982px;" >
<center>
<tr>
<td align="center">
<asp:Label ID="Label1" runat="server" CssClass="label" Font-Bold="True"
ForeColor="White" Text="سرویس ها" Font-Names="Tahoma"
Font-Size="X-Small"></asp:Label>
</td>
</tr>
<tr>
<td align="center">
<asp:FormView ID="FormView1" runat="server"
DataSourceID="SqlDataSource1" Height="93px" style="text-align: left"
Width="170px" onload="FormView1_Load" DataKeyNames="id">
<PagerSettings Mode="NextPrevious" NextPageText="بعدی" PageButtonCount="1"
PreviousPageText="قبلی" />
<ItemTemplate>
<table style="width: 146px">
<tr>
<td class="style8" rowspan="2">
<asp:Image ID="Image1" runat="server" Height="47px"
ImageUrl='<%# Path.Combine(@"~\ImgService", Eval("Pic").ToString()) %>'
Width="73px" />
</td>
<td align="right" class="style6">
<asp:Label ID="TitleLabel" runat="server" CssClass="label" Font-Bold="True"
ForeColor="White" Text='<%# Bind("Title") %>' Font-Names="Tahoma"
Font-Size="X-Small" />
</td>
</tr>
<tr>
<td>
&nbsp;</td>
</tr>
<tr>
<td align="right" class="style7" colspan="2">
<asp:Label ID="DiscriptLabel" runat="server" CssClass="label" ForeColor="White"
style="text-align: right" Text='<%# Bind("Discript") %>'
Font-Names="Tahoma" Font-Size="X-Small" />
</td>
</tr>
<tr>
<td style="text-align: left">
<asp:LinkButton ID="LinkButton1" runat="server" Font-Names="Tahoma"
Font-Size="X-Small" ForeColor="White" onclick="LinkButton1_Click">...بیشتر</asp:LinkButton>
</td>
<td class="style7">
&nbsp;</td>
</tr>
</table>
</ItemTemplate>
<PagerStyle CssClass="deco" Font-Bold="True" Font-Names="Tahoma"
Font-Size="X-Small" ForeColor="White" />
</asp:FormView>
</td>
</tr>
<tr>
<td align="center">
<asp:ImageButton ID="ImageButton2"
runat="server" Height="25px"
ImageUrl="~/images/pre.png"
onclick="ImageButton2_Click" Width="25px" />
<asp:ImageButton ID="ImageButton1"
runat="server" Height="30px"
ImageUrl="~/images/next.png"
onclick="ImageButton1_Click" Width="30px" />
<br />
<br />
<asp:Timer ID="Timer1" runat="server" Interval="15000" ontick="Timer1_Tick">
</asp:Timer>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</TD>


</tr>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:TempCS%>"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [Title], [Discript], [Pic], [id] FROM [TB_Service]">
</asp:SqlDataSource>
</center>
</table>

</form>

</body>
</html>






اینم code behind





using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System;

public partial class cs_database_horizontal : System.Web.UI.Page
{

public SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["TempCS"].ConnectionString);
Control Control;
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{

try
{


int tab = Int32.Parse(Request["TabId"].Trim());
switch (tab)
{
case 1:
//Control = this.LoadControl("~/Control/pl.ascx");
//PlaceHolder2.Controls.Add(Control);
//break;
case 7:
Control = this.LoadControl("~/Control/ce.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 8:
Control = this.LoadControl("~/Control/op.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 9:
Control = this.LoadControl("~/Control/Be.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 10:
Control = this.LoadControl("~/Control/Ft.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 11:
Control = this.LoadControl("~/Control/Wss.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 12:
Control = this.LoadControl("~/Control/Wir.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 13:
Control = this.LoadControl("~/Control/Int.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 14:
Control = this.LoadControl("~/Control/Siln.ascx");
PlaceHolder2.Controls.Add(Control);
break;
case 15:
Control = this.LoadControl("~/Control/Via.ascx");
PlaceHolder2.Controls.Add(Control);
break;

case 16:
Control = this.LoadControl("~/Control/Gal.ascx");
PlaceHolder2.Controls.Add(Control);
break;

default:
{
Control = this.LoadControl("~/Control/Pl.ascx");
PlaceHolder2.Controls.Add(Control);
break;
}
}
}
catch
{
Control = this.LoadControl("~/Control/Pl.ascx");
PlaceHolder2.Controls.Add(Control);
}
}
}

protected void Timer1_Tick(object sender, EventArgs e)
{
F1(sender, e);
}

void F1(object sender, EventArgs e)
{
int count = FormView1.PageCount;

if (FormView1.PageIndex == 0)
{
FormView1.PageIndex = count - 1;
}
else
{
FormView1.PageIndex = FormView1.PageIndex - 1;
}
FormView1_Load(sender, e);
}


protected void FormView1_Load(object sender, EventArgs e)
{

}







مشکل رو هم که گفتم وقتی تایمر تیک میخوره page_load هم همراهش اجرا میشه من نمیخوام این اتفاق بیافته...
مرسی

araz_pashazadeh
چهارشنبه 18 شهریور 1388, 00:16 صبح
خوب... کماکان منتظرم ... آقای راد کار خودته یه نگاهی به این تاپیک بندازین لطفا.

hesamsalehnamadi
چهارشنبه 18 شهریور 1388, 16:34 عصر
من هم همین مشکل رو دارم ... و خیلی هم گشتم ولی آخرش به این نتیجه رسیدم که شدنی نیست البته نظر منه ها... شاید راهی باشه که من بلد نیستم.. به هر حال من که نتونستم.

hamid1988
چهارشنبه 18 شهریور 1388, 17:19 عصر
درون آپدیت پنل یک تایمر و یک لیبل گذاشتم که لیبل زمان جاری رو نشون میده، با تیک خوردن تایمر لیبل آپدیت میشه، ولی مشکلی که شما گفتین بوجود نمیاد!

alireza_s_84
چهارشنبه 18 شهریور 1388, 19:00 عصر
سلام:
توی رویداد PageLoad کدهایی که نویشتین رو بصورت زیر قرار بدین:



If Not IsCallback Then
کدهای مربوطه که نمیخواهید با اجرای تایمر اجرا شوند
End If



البته اگر از UserControl و یا MasterPage استفاده کرده باشید و اونجا هم رویداد PageLoad داشته باشید باید این کد رو قرار بدین
باز هم مشکلی بود مطرح کنید
alireza.salemian@gmail.com
موفق باشید

hesamsalehnamadi
جمعه 20 شهریور 1388, 18:36 عصر
سلام:
توی رویداد PageLoad کدهایی که نویشتین رو بصورت زیر قرار بدین:



IfNot IsCallback Then
کدهای مربوطه که نمیخواهید با اجرای تایمر اجرا شوند
EndIf

البته اگر از UserControl و یا MasterPage استفاده کرده باشید و اونجا هم رویداد PageLoad داشته باشید باید این کد رو قرار بدین
باز هم مشکلی بود مطرح کنید
alireza.salemian@gmail.com
موفق باشید

راه حل شما هم درسته ولی من مشکلم اینه که اصلا نمیخوام page_load اجرا بشه که چه برسه به شرطهای مربوط به Page بازم مرسی کماکان درگیر این موضوع هستم.....

hesamsalehnamadi
جمعه 20 شهریور 1388, 18:41 عصر
درون آپدیت پنل یک تایمر و یک لیبل گذاشتم که لیبل زمان جاری رو نشون میده، با تیک خوردن تایمر لیبل آپدیت میشه، ولی مشکلی که شما گفتین بوجود نمیاد!

اگه برنامه رو دیباگر کنی و به هر تابع یک تگ بزاری میبینیم که باز هم page_load اجرا میشه...
بازم مرسی از توجهتون

alireza_s_84
جمعه 20 شهریور 1388, 18:58 عصر
سلام:
شما هیچ درخواستی رو به اون صفحه نفرستین تا Page_Load هم اجرا نشه .
مگر چنین چیزی ممکنه که به صفحه درخواست داده باشی اما کدهاش اجرا نشن اون هم Page_Load .
منطقی فکر کنین میبینید جور در نمیاد.

hesamsalehnamadi
جمعه 20 شهریور 1388, 23:39 عصر
گفته شما درست .... اما اون کاری که من میخوام بکنم به شرح زیر هستش

یک FromView دارم توش یک سری اطلاعات را بایند کردم
این فرم ویو داخل آپدیت پانل هست
حالا من وقتی یک دکمه میزارم و کدهای مربوط به عوض کردن pageIndex مربوط به FormView رو انجام میدم با کد زیر



int count = FormView2.PageCount;

if (FormView2.PageIndex == count - 1)
{
FormView2.PageIndex = 0;
}
else
{
FormView2.PageIndex = FormView2.PageIndex + 1;
}
FormView2_Load(sender, e);



خوب تا اینجا درسته ... ولی حالا من میخوام این عوض کردن صفحه هر چند ثانیه بک بار انجام بشه... برا این منظور هم از تایمر استفاده کردم و تو Evente تیکش آوردم تابع فوق رو فراخوانی کردم.. این Solution من برا این کار بود که به دردم نخورد چون Page_Load اجرا میشه و اجرا شدن اون هم باعث میشه جاهایی که صفحه Scroll داره موقعیتش حفظ نشه و هی بالا پایین بپره..... خوب همه چیزو گفتم حالا اگه شما برا انجام این کار یه Solution دیگه ای دارید ارائه بدین بزارین ما هم دعاگوی شما باشیم...