PDA

View Full Version : آموزش: صفحه بندی



maryammashkani
یک شنبه 03 خرداد 1394, 08:25 صبح
سلام بر دوستان گرامی
من یه مدت زیادی دنبال صفحه بندی datalist و repeater بودم و بعد از کلی جستجو با کمک یکی از اعضای محترم همین سایت مشکلم حل شد.
حالا اونو اینجا با شما دوستان به اشتراک میزارم.

صفحه بندی datalist یا repeater

1-ابتدا در sql یک store procedure ایجاد نمایید


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE GetCustomersPageWise
@PageIndex INT = 1
,@PageSize INT = 5
,@RecordCount INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT ROW_NUMBER() OVER
(
ORDER BY [SaId] ASC
) AS RowNumber
,[SaId]
,[SubGroupMain]
,[SubGroupFarei1]
,[SubGroupFarei2]
,[Name]
,[Mark]
,[Pay]
,[VahedPay]
,[Garanti]
,[Mojood]
,[Memo]
,[Pic]
,[DateSabt]
,[TedadForoosh]

INTO #Results
FROM [Mahsoolat]
SELECT @RecordCount = COUNT(*)
FROM #Results

SELECT * FROM #Results
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #Results
END
GO


2-حالا دیتالیست یا ریپیتر رو زراحی کنید و بعد از اون یه ریپیتر به صورت زیر برای شماره ها بزارین


<asp:DataList ID="dlkala" runat="server" RepeatColumns="4" CellSpacing="10" Width="742px" OnItemCommand="dlkala_ItemCommand" Visible="True">
<ItemTemplate>
<div style="border: thin groove #333399;width:150px" dir="rtl" >
<br />
<table dir="rtl" >
<caption>
&nbsp;&nbsp;
<asp:ImageButton ID="imgpic" runat="server" BorderColor="#000099" BorderStyle="Groove" BorderWidth="1px" Height="120px" ImageUrl='<%# Eval("Pic") %>' Width="120px" />
<tr>
<td style="width:30px"></td>
<td style="width: 30px"></td>
<td style="width: 80px">
<asp:Label ID="lblidkala" runat="server" Text='<%# Eval("SaId") %>' Visible="False"></asp:Label>
</td>
</tr>
<tr>
<td style="width:30px"></td>
<td>
<asp:Label ID="Label2" runat="server" Text="نام"></asp:Label>
</td>
<td style="width: 80px">
<asp:Label ID="lblname1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</td>
</tr>
<tr>
<td style="width:30px"></td>
<td>
<asp:Label ID="Label1" runat="server" Text="قیمت"></asp:Label>
</td>
<td>
<asp:Label ID="lblpay1" runat="server" Text='<%# Eval("Pay") %>'></asp:Label>
</td>
</tr>
<tr>
<td dir="rtl">&nbsp;</td>
<td style="width:30px"></td>
<td dir="ltr">
<asp:ImageButton ID="imgdetailes" runat="server" CommandName="info" Height="30px" ImageUrl="~/images/site/basket.png" Width="30px" />
</td>
</tr>
</caption>
</table>
</div>
</ItemTemplate>
</asp:DataList>
<asp:Repeater ID="rptPager" runat="server">
<ItemTemplate>
<asp:LinkButton BorderColor="#333399" BorderStyle="Groove" BorderWidth="1px" ForeColor="#0000cc" ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%# Eval("Value") %>'
CssClass='<%# Convert.ToBoolean(Eval("Enabled")) ? "page_enabled" : "page_disabled" %>'
OnClick="Page_Changed" OnClientClick='<%# !Convert.ToBoolean(Eval("Enabled")) ? "return false;" : "" %>'></asp:LinkButton>
</ItemTemplate>
</asp:Repeater>


3-حالا به قسمت کد نویسی برید و قسمت های زیر رو اضافه کنید


private int PageSize = 12;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.GetCustomersPageWise(1);
}
}




private void GetCustomersPageWise(int pageIndex)
{
using (SqlConnection con = new SqlConnection(Session["ConnectionStr"].ToString()))
{
using (SqlCommand cmd = new SqlCommand("GetCustomersPageWise1", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
//cmd.Parameters.AddWithValue("@PageSize", PageSize);
cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4);
cmd.Parameters["@RecordCount"].Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@sgm", Session["kalagroup"].ToString());
cmd.Parameters.AddWithValue("@sgf1", Session["namef1"].ToString());
cmd.Parameters.AddWithValue("@sgf2", this.ViewState["namef2"].ToString());
con.Open();
IDataReader idr = cmd.ExecuteReader();
dlkala.DataSource = idr;
dlkala.DataBind();
idr.Close();
con.Close();
int recordCount = Convert.ToInt32(cmd.Parameters["@RecordCount"].Value);
this.PopulatePager(recordCount, pageIndex);
}
}
}





private void PopulatePager(int recordCount, int currentPage)
{
double dblPageCount = (double)((decimal)recordCount / Convert.ToDecimal(PageSize));
int pageCount = (int)Math.Ceiling(dblPageCount);
List<ListItem> pages = new List<ListItem>();
if (pageCount > 0)
{
for (int i = 1; i <= pageCount; i++)
{
pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
}
}
rptPager.DataSource = pages;
rptPager.DataBind();
}




protected void Page_Changed(object sender, EventArgs e)
{
int pageIndex = int.Parse((sender as LinkButton).CommandArgument);
this.GetCustomersPageWise(pageIndex);
}

maryammashkani
یک شنبه 03 خرداد 1394, 08:26 صبح
بر اساس نیازتون میتونید به جای page_load هر جای دیگه هم فراخوانی کنیدش

maryammashkani
یک شنبه 03 خرداد 1394, 08:27 صبح
ببخشید
من دو تا store procedure داشتم ، برای کدهایی که گداشتم ، store procedure ش اینه


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE GetCustomersPageWise1
@PageIndex INT = 1
,@PageSize INT = 12
,@RecordCount INT OUTPUT
,@sgm nvarchar(25)
,@sgf1 nvarchar(35)
,@sgf2 nvarchar(35)
AS
BEGIN
SET NOCOUNT ON;
SELECT ROW_NUMBER() OVER
(
ORDER BY [SaId] ASC
) AS RowNumber
,[SaId]
,[SubGroupMain]
,[SubGroupFarei1]
,[SubGroupFarei2]
,[Name]
,[Mark]
,[Pay]
,[VahedPay]
,[Garanti]
,[Mojood]
,[Memo]
,[Pic]
,[DateSabt]
,[TedadForoosh]

INTO #Results
FROM [Mahsoolat]
where SubGroupMain=@sgm and SubGroupFarei1=@sgf1 and SubGroupFarei2=@sgf2
SELECT @RecordCount = COUNT(*)
FROM #Results

SELECT * FROM #Results
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #Results
END
GO