PDA

View Full Version : رفرش نشدن صفحه در زمان کلیک بر روی باتن موجود در دیتالیست



sara_t
دوشنبه 17 مهر 1391, 10:45 صبح
سلام دوستان

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

همه چی درسته تا وقتی که مثلا من به صفحات دو و ... میرم و یه کالایی رو به سبدخرید اضافه میکنم.
در این حالت صفحه رفرش میشه و دیتالیست من برمیگرده صفحه اول.
از upadetpanel هم استفاده کردم اما یا من بلد نبودم و یا اینکه درست نشد.

ممنون میشم راهنمایی بفرمایید چطور این مشکل رو حل کنم.


<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" RepeatColumns="3"

RepeatDirection="Horizontal" Width="550px"
onitemcommand="DataList1_ItemCommand" class="album-frame"
>
<ItemTemplate>
<br />
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# Eval("mimageurl","~/photogalery/{0}") %>'
Height="100px" Width="100px"/>
<br />
<br />
mname:
<asp:Label ID="mnameLabel" runat="server" Text='<%# Eval("mname") %>' />
<br />
mgheymat:
<asp:Label ID="mgheymatLabel" runat="server" Text='<%# Eval("mgheymat") %>' />
<br />
mimageurl:
<asp:Label ID="mimageurlLabel" runat="server" Text='<%# Eval("mimageurl") %>' />
<br />
<asp:ImageButton ID="ImageButton2" runat="server" CommandName="addtocart"
Height="16px" Width="97px" ImageUrl="~/img/addto.gif" />
<br />
<br />
<br />
<br />
</ItemTemplate>
</asp:DataList>


<cc1:CollectionPager ID="CollectionPager1" runat="server" PageSize="12"
MaxPages="10"
IgnoreQueryString="False"
PageNumbersDisplay="Numbers" PagingMode="PostBack" QueryStringKey="Page"
ResultsLocation="None" ShowFirstLast="False" ShowPageNumbers="True"
HideOnSinglePage="False" EnableViewState="False" UseSlider="True">
</cc1:CollectionPager>


protected void Page_Load(object sender, EventArgs e)
{

DataTable SampleDataSet = SampleData();
CollectionPager1.DataSource = SampleDataSet.DefaultView;
CollectionPager1.BindToControl = DataList1;
DataList1.DataSource = CollectionPager1.DataSourcePaged;

}


public DataTable SampleData()
{
mahsulat mahsulat = new mahsulat();
mahsulat.mname = TextBox1.Text;
mahsulatBAL m = new mahsulatBAL();
DataTable dTable = new DataTable();
try
{
dTable = m.SearchDrug(mahsulat);
}
catch (Exception ee)
{
//Label1.Text = ee.Message.ToString();
}
finally
{
m = null;
}
return dTable;
}

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "addtocart")
{
string mname = ((Label)e.Item.FindControl("mnamelabel")).Text;
decimal mghyemat = decimal.Parse(((Label)e.Item.FindControl("mgheymatlabel")).Text);
string mimageurl = ((Label)e.Item.FindControl("mimageurllabel")).Text;
int ID = (int)DataList1.DataKeys[e.Item.ItemIndex];
if (Profile.Cart == null)
{
Profile.Cart = new dtrbasket.ShoppingCart();
}
Profile.Cart.insert(ID, mname, mimageurl, mghyemat, 1);
Server.Transfer("pharmacybasket.aspx");

}
}

amirzandi
دوشنبه 17 مهر 1391, 10:47 صبح
به نظر من ، در Page_load رویداد Page.Postback را کنترل کنید.

sara_t
دوشنبه 17 مهر 1391, 11:09 صبح
ممنون
من این رویداد رو ندارم
منظورتون if (!IsPostBack) هست؟

اینو تست کردم بصورت زیر

if (!IsPostBack)
{
DataTable SampleDataSet = SampleData();
CollectionPager1.DataSource = SampleDataSet.DefaultView;
CollectionPager1.BindToControl = DataList1;
DataList1.DataSource = CollectionPager1.DataSourcePaged;
}

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

amirzandi
دوشنبه 17 مهر 1391, 11:17 صبح
شما باید لیست رو یکبار دیتابایند کنید ، نه هر بار که صفحه Refresh می شه.

sara_t
دوشنبه 17 مهر 1391, 11:25 صبح
من متوجه نمیشم میشه یه مثال بزنید .

amirzandi
دوشنبه 17 مهر 1391, 11:34 صبح
در vb من اینجوری عمل می کنم :


If Not Page.IspostBack Then
LoadGrid()
End If

sara_t
دوشنبه 17 مهر 1391, 11:48 صبح
من این روش رو هم تست کردم جواب نمیده. قبلا این روش رو برای گرید بکاربردم و درست بوده. اما فکر میکنم این کالکشن پیجر حتما نیاز به پست بک داره . باید بتونیم اونو کنترل کنیم.

amirzandi
دوشنبه 17 مهر 1391, 12:05 عصر
اینجا رو نگاهی بندازین... این کار رو انجام داده
http://www.c-sharpcorner.com/uploadfile/rizwan328/datalist-custom-paging-in-Asp-Net-using-C-Sharp/

sara_t
دوشنبه 17 مهر 1391, 12:21 عصر
بعد از کلیک بر روی باتن موجود در دیتالیست چه اتفاقی می افته که صفحه کامل رفرش میشه؟
در واقع رویداد itemcommand در دیتالیست

amirzandi
دوشنبه 17 مهر 1391, 12:25 عصر
می شه کد خود صفحه را بزارین اینجا؟

sara_t
دوشنبه 17 مهر 1391, 12:56 عصر
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using dtrbasket;

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

protected void Page_Load(object sender, EventArgs e)
{
BindGrid();

}
private void BindGrid()
{
DataTable SampleDataSet = SampleData();
CollectionPager1.DataSource = SampleDataSet.DefaultView;
CollectionPager1.BindToControl = DataList1;
DataList1.DataSource = CollectionPager1.DataSourcePaged;
DataList1.DataSource = CollectionPager1.DataSourcePaged;
}
protected void ImageButton4_Click(object sender, ImageClickEventArgs e)
{

}

public DataTable SampleData()
{
mahsulat mahsulat = new mahsulat();
mahsulat.mname = TextBox1.Text;
mahsulatBAL m = new mahsulatBAL();
DataTable dTable = new DataTable();
try
{
dTable = m.SearchDrug(mahsulat);
}
catch (Exception ee)
{
//Label1.Text = ee.Message.ToString();
}
finally
{
m = null;
}
return dTable;
}

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "addtocart")
{
string mname = ((Label)e.Item.FindControl("mnamelabel")).Text;
decimal mghyemat = decimal.Parse(((Label)e.Item.FindControl("mgheymatlabel")).Text);
string mimageurl = ((Label)e.Item.FindControl("mimageurllabel")).Text;
int ID = (int)DataList1.DataKeys[e.Item.ItemIndex];
if (Profile.Cart == null)
{
Profile.Cart = new dtrbasket.ShoppingCart();
}
Profile.Cart.insert(ID, mname, mimageurl, mghyemat, 1);
Server.Transfer("pharmacybasket.aspx");


}
}

amirzandi
دوشنبه 17 مهر 1391, 13:00 عصر
منظورم code_behind نبود ، منظورم source مربوط به Design صفحه بود...

sara_t
دوشنبه 17 مهر 1391, 13:06 عصر
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="pharmacybasket.aspx.cs" Inherits="pharmacybasket" %>

<%@ Register src="ShoppingControlCart.ascx" tagname="ShoppingControlCart" tagprefix="uc1" %>

<%@ Register assembly="CollectionPager" namespace="SiteUtils" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>

<body>
<form id="form1" runat="server" enableviewstate="True" method="get">


<div>

&nbsp;
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<div>
<asp:TextBox ID="TextBox1" runat="server" Height="26px" Width="360px"
Font-Bold="True" Font-Size="Medium" ></asp:TextBox>
<asp:ImageButton ID="ImageButton4"
runat="server" Width="112px" Height="28px" ImageUrl="~/images/search.gif"
onclick="ImageButton4_Click" />
<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" RepeatColumns="3"
RepeatDirection="Horizontal" Width="550px"
onitemcommand="DataList1_ItemCommand" class="album-frame"

>
<ItemTemplate>
<br />
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# Eval("mimageurl","~/photogalery/{0}") %>'
Height="100px" Width="100px"/>
<br />
<br />
mname:
<asp:Label ID="mnameLabel" runat="server" Text='<%# Eval("mname") %>' />
<br />
mgheymat:
<asp:Label ID="mgheymatLabel" runat="server" Text='<%# Eval("mgheymat") %>' />
<br />
mimageurl:
<asp:Label ID="mimageurlLabel" runat="server" Text='<%# Eval("mimageurl") %>' />
<br />
<asp:ImageButton ID="ImageButton2" runat="server" CommandName="addtocart"
Height="16px" Width="97px" ImageUrl="~/img/addto.gif" />
<br />
<br />
<br />
<br />
</ItemTemplate>
</asp:DataList>
<div align="right" style="position: absolute; z-index: 9; top: 153px; right: 0px; height: 355px;"
dir="rtl">
<uc1:ShoppingControlCart ID="ShoppingControlCart1" runat="server" />
<br />
</div>

<p>
</p>
<cc1:CollectionPager ID="CollectionPager1" runat="server" PageSize="12"
MaxPages="10"
IgnoreQueryString="False"
PageNumbersDisplay="Numbers" PagingMode="QueryString" QueryStringKey="Page"
ResultsLocation="None" ShowFirstLast="False" ShowPageNumbers="True"
HideOnSinglePage="False" EnableViewState="False" UseSlider="True" onclick="CollectionPager1_Click"

>
</cc1:CollectionPager>

<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:TutTestConn %>"
SelectCommand="SELECT * FROM [mahsulat]" ></asp:SqlDataSource>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
</div>


</div>

</form>
</body>
</html>

amirzandi
دوشنبه 17 مهر 1391, 13:17 عصر
پیشنهاد می کنم از UpdatePanel استفاده کنید و البته UpdateMode آنرا برابر Conditional قرار بدید و ChildrenAsTrigger=false . اگر کمی سرچ کنین مثال برای UpdatePanel زیاد هست...

sara_t
دوشنبه 17 مهر 1391, 13:35 عصر
من از upadetpanel استفاده کردم و با زدن دکمه دیگه به صفحه اول بر نمیگرده
ولی یه مشکل جدید ایجاد میکنه و اونم اینه که سبدخریدم اپدیت نمیشه و تا صفحه رو یکبار رفرش نکنم کالایی که کلیک کردم رو در سبدخرید نمیبینم.

قبلا برای انلاین دیدن از server.transfer استفاده کردم که حالا چون این سرور ترنسفر در دیتالیست هست و دیتالیست در updatepanel اجرا نمیشه.

من دیتالیست رو کامل در updatepanel قرار دادم ایا کارم درست بوده؟

amirzandi
دوشنبه 17 مهر 1391, 13:41 عصر
شما کل form را در Updatepanel قرار دهید.

saeed_sho
دوشنبه 17 مهر 1391, 13:51 عصر
برای اینکه بیشتر از یک صفحه رو مدیریت کنید داخل صفحه یه updatePanel بزارید و داخل updatePanel یه کنترل مالتی ویو بزارید و هر صفحه رو در یک ویو بزارید هر باتنی که باعث میشه برید صفحه ی دیگه در رویداد کلیک آن ویو فعال در مالتی ویو رو عوض کنید

sara_t
دوشنبه 17 مهر 1391, 14:01 عصر
من کل صفحه رو در یک اپدیت پنل قرار دام درست نشد.

روش شما دوست عزیز saeed_sgo رو هم نمیفهمم. میشه واضحتر بگید.

amirzandi
دوشنبه 17 مهر 1391, 14:12 عصر
شما چجوری cart رو نمایش می دین؟ بعد از اینکه کاربر add to cart کرد ، این insert می شه در یک table درسته؟

sara_t
سه شنبه 18 مهر 1391, 09:32 صبح
من کل برنامه رو اینجا قرار میدم ممنون میشم بررسیش کنید.

sara_t
سه شنبه 18 مهر 1391, 09:50 صبح
چون حجمش زیاد بود نتونستم با عکس بفرستم یه فولدر در برنامه دارم بنام photogalery که اونو اینجا آپ میکنم که عکس با تعداد لازم رو درش ساختم .اونو کپی کنید تو فولدر برنامه.

ممنون

sara_t
سه شنبه 18 مهر 1391, 09:56 صبح
توی برنامه یه فولدر هست بنام photogalery که عکسها رو در اونجا قرار دادم.
عکسها باید بصورت image1,image2,... تا اخر باشند. خاستم تمام عکسها رو بذارم که حجمش زیاد بود آپ نمیشد.

برای جدولم هم اسکریپتش بصورت زیر هست:


USE [DTR]
GO

/****** Object: Table [dbo].[mahsulat] Script Date: 10/08/2012 22:51:10 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[mahsulat](
[ID] [int] IDENTITY(1,1) NOT NULL,
[mname] [nvarchar](50) NULL,
[mtarikht] [nvarchar](50) NULL,
[mtarikhe] [nvarchar](50) NULL,
[mgheymat] [decimal](18, 0) NULL,
[mimageurl] [nvarchar](50) NULL,
CONSTRAINT [PK_mahsulat] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

saeed_sho
سه شنبه 18 مهر 1391, 20:16 عصر
پست 6 این تاپیک رو ببینید
http://barnamenevis.org/showthread.php?362450-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%82%D8%B3%D9%85%D8%AA%DB%8C-%D8%A7%D8%B2-%D8%B5%D9%81%D8%AD%D9%87-%D8%A8%D8%AF%D9%88%D9%86%D9%87-refresh