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>
<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"> </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);
}
من یه مدت زیادی دنبال صفحه بندی 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>
<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"> </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);
}