* Login   * Register


Last visit was:
It is currently Tue Feb 20, 2018 10:51 pm
View unanswered posts
View active topics





Post new topic Reply to topic  [ 5 posts ] 
Author Message
 Post subject: Helf me
PostPosted: Fri May 15, 2009 8:16 pm 
Offline
User avatar

Joined: Sun Mar 08, 2009 12:34 am
Posts: 23
cac ban oi. ban nao biet cach phan trang trong trang web vui long chi mih voi. Thanks truoc nge. :) :) :) :roll:


Report this post
Top
 Profile E-mail  
Reply with quote  
 Post subject: Phân trang trong asp.net
PostPosted: Wed May 27, 2009 12:32 pm 
Offline
User avatar

Joined: Thu Feb 05, 2009 3:14 pm
Posts: 28
So với ASP hay PHP, thì việc phân trang với asp.net giờ đây khá đơn giản.

Gridview là một điều khiển cực mạnh của asp.net cho phép chúng ta làm được điều đó một cách dễ dàng, chỉ mất vài dòng lệnh.

Ví dụ sau đây cho phép hiển thị danh sách các sản phẩm (trong csdl nwind.mdb) với khả năng phân trang.

================= Trang Default.aspx.vb =================
Imports System.Data.OleDb
Imports System.Data

Partial Class _Default
Inherits System.Web.UI.Page

Const strConn As String = "Provider=Microsoft.jet.oledb.4.0; Data source=c:\nwind.mdb"
Const strCommandText As String = "Select * From Suppliers"

'/// Hiển thị dữ liệu trên gridview ngay khi nạp form
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Call LoadData()
End Sub

'///Nạp danh sách sản phẩm vào Grid để hiển thị
Sub LoadData()
Dim Da As New OleDbDataAdapter(strCommandText, strConn)
Dim Ds As New DataSet

Da.Fill(Ds, "SanPham")
dgrProducts.DataSource = Ds
dgrProducts.DataMember = "SanPham"
dgrProducts.DataBind()

'// Giải phóng đối tượng
Ds.Dispose()
Da.Dispose()
End Sub

'/// Thủ tục này được gọi mỗi khi người dùng chọn một trang để hiển thị
'/// Chỉ số trang mà người dùng chọn sẽ được lưu trong tham số e.PageIndex
Protected Sub dgrProducts_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles dgrProducts.PageIndexChanging
'/// Hiển thị trang mà người dùng vừa chọn
dgrProducts.PageIndex = e.NewPageIndex

'///Hiển thị ngay
Call LoadData()
End Sub
End Class


============= Trang default.aspx =========================
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Paging demo</title>
</head>
<body>
<form id="form1" runat="server">

<asp:GridView ID="dgrProducts" runat="server" AllowPaging="true" PageSize="10"> </asp:GridView>

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


Report this post
Top
 Profile E-mail  
Reply with quote  
 Post subject: Phân trang trong php
PostPosted: Wed May 27, 2009 12:36 pm 
Offline
User avatar

Joined: Thu Feb 05, 2009 3:14 pm
Posts: 28
Khi truy vấn dữ liệu mà nhận được một danh sách kết quả quá dài, người ta thường phải phân trang ứng dụng cho phù hợp (ít nhất là về mặt thẩm mỹ).

Nguyên tắc của việc phân trang ứng dụng như sau:

- Bước 1: Tính tóan số lượng bản ghi thỏa mãn điều kiện trả về ( thường sử dụng hàm count trong câu lệnh SQL).
- Bước 2: Xác định số lượng bản ghi sẽ hiển thị trên một trang.
- Bước 3: Dựa trên các thông tin có được từ bước 1 và 2, xác định được số trang cần hiển thị.
- Bước 4: Tính tóan số lượng bản ghi sẽ hiển thị tính từ trang nào đó do NSD lựa chọn (Sử dụng câu lệnh LIMIT).

Dưới đây tôi sẽ cung cấp cho các bạn 2 function,
- Function GetPageLinks ($Sql, $PageSize): Trả về một chuỗi văn bản chứa số trang hiển thị, với dữ liệu vào bao gồm câu lệnh SQL ($Sql) xác định số lượng bản ghi thỏa mãn điều kiện tìm kiếm, và "kích thước" của một trang ($PageSize)

code:
function GetPageLinks($Sql,$PageSize)
{
$result=mysql_query ($Sql);
if (!$result or mysql_num_rows ($result)==0)
{
}
else
{
$line=mysql_fetch_array($result);
$Pages=ceil($line[0]/$PageSize);
if ($Pages>1)
{
$PageLink="Trang ";
for ($i=0;$i<=$Pages-1;$i++)
{
$j=$i+1;
if ($j==$_GET["page"])
{
$PageLink.=" {$j} | ";
}
else
{
$NewGet="";
reset ($_GET);
while (list($key, $val) = each($_GET))
{
if ($key!='page')
{
$NewGet.="&{$key}={$val}";
}

}
$NewGet.="&page={$j}";
$NewGet=substr($NewGet,1);

$PageLink.=" <a href='?{$NewGet}'>{$j}</a> | ";
}
}
$PageLink=substr($PageLink,0,-2);
}
}
return $PageLink;
}

Hàm tiếp theo sẽ hiển thị danh sách các record của một trang nào đó, đồng thời demo cách sử dụng hàm GetPageLinks ở trên:
(VD dưới đây sử dụng một câu truy vấn lấy dữ liệu từ một bảng dulieu với một Category có id xác định:


Code:
function LoadList()
{
if (isset($_GET["CatId"]) and is_numeric ($_GET["CatId"]))
$Dieukien="where CatId={$_GET["CatId"]}";

// Cau lenh truy van chinh khi chua phan trang:
$Sql="Select * from dulieu {$Dieukien} ";
// Tinh toan so luong ban ghi tra ve:
$PageSize=20;
$CountSQL="Select count(*) from dulieu {$Dieukien}";
$PageLinks= GetPageLinks ($CountSQL,$PageSize);

if (isset ($_GET["page"]) and is_numeric ($_GET["page"]))
{
$StartNum=$PageSize * ($_GET["page"]-1); // Xac dinh vi tri ban ghi bat dau
}
else
{
$StartNum=0;
}
//Tiep tuc xay dung cau lenh truy van de lay du lieu theo trang
$Sql.= " Limit {$StartNum}, {$PageSize}";
$result=mysql_query ($Sql);
if (!$result or mysql_num_rows ($result)==0)
{
$tmp="Híc, tui chẳng mò được chi cả!";
}
else
{
$tmp="{$PageLinks}";
//========== Hiển thị dữ liệu, các bạn tự viết cho phù hợp với yêu cầu
$tmp.="{$PageLinks}";
}

return $tmp;
}


Report this post
Top
 Profile E-mail  
Reply with quote  
 Post subject: PHAN TRANG PHP
PostPosted: Wed May 27, 2009 12:37 pm 
Offline
User avatar

Joined: Thu Feb 05, 2009 3:14 pm
Posts: 28
---------
Đây là 1 hàm phân trang chia thành từng đoạn, TG đang sử dụng và post lên đây, anh em nào có nhu cầu phân trang thì sử dụng:
<?php
function divPage($total = 0,$currentPage = 0,$div = 5,$rows = 10){
if(!$total || !$rows || !$div || $total<=$rows) return false;
$nPage = floor($total/$rows) + (($total%$rows)?1:0);
$nDiv = floor($nPage/$div) + (($nPage%$div)?1:0);
$currentDiv = floor($currentPage/$div) ;
$sPage = '';
if($currentDiv) {
$sPage .= '<a href="./?p=0"><<</a> ';
$sPage .= '<a href="./?p='.($currentDiv*$div - 1).'"><</a> ';
}
$count =($nPage<=($currentDiv+1)*$div)?($nPage-$currentDiv*$div):$div;
for($i=0;$i<$count;$i++){
$page = ($currentDiv*$div + $i);
$sPage .= '<a href="./?p='.($currentDiv*$div + $i ).'" '.(($page==$currentPage)?'class="current"':'').'>'.($page+1).'</a> ';
}
if($currentDiv < $nDiv - 1){

$sPage .= '<a href="./?p='.(($currentDiv+1)*$div + 1 ).'">></a> ';
$sPage .= '<a href="./?p='.(($nDiv-1)*$div + 1 ).'">>></a>';
}

?>

Giải thích các thông số:
$total: tổng số mẫu tin
$currentPage: trang hiện hành
$div: số trang trong 1 đoạn
$rows: số dòng trên 1 trang
Cách dùng:

<?php
$p = $_GET['p'];// currentPage
$rows = 10; // số record trên mỗi trang
$div = 5; // số trang trên 1 phân đoạn

$sql = "SELECT COUNT(*) AS total FROM <table> WHERE <dieu_kine>";
//fetch dữ liệu lấy giá trị của total, tổng số record với điều kiện là <dieu_kien>, ta được biến $total;

//lấy dữ liệu cho trang $p
$start = $p*$rows;
$sql = "SELECT * FROM <table> WHERE <dieu_kine> LIMIT $start,$rows";
// hiển thị dữ liệu

// in phân trang
print divPage($total,$p,$div,$rows)
?>


Report this post
Top
 Profile E-mail  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 


Who is online

Users browsing this forum: No registered users and 0 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron

Free Forums · php-BB© · Internationalization Project · Report abuse · Terms Of Use/Privacy Policy
© Forums-Free.com 2009