แบ่งหน้า (Paging) โดยไม่ใช้ DataGrid ASP .NET คือว่าผมด้ ทำการ select ข้อมูลออกมาแบบนี้ครับ
ใช้ SqlDataAdapter ซิครับ
จาก DataBase --> SqlDataAdapter --> Datatable
แล้วใช้ loop for ว่าจะ เริ่มที่ record ไหนถึงไหน 1-10, 11-20
...
...
...
...
ดู code ข้างบนแล้ว ไปต่อไม่ถูกเลย
เข้าใจเลยว่าทำไมถึงไม่ใช้ GridView
งั้นเดี๋ยวมาลองใหม่ให้สมกับที่ใช้ C# .net กันดีกว่า
1. ลืมของเก่าซะ
2. เปิด file ขึ้นใหม่กำหนดให้เป็นแบบ code behind เอาเป็น Default.aspx กับ Default.aspx.cs ดีกว่า จะได้แบบนี้ออกมา
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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 runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Date :
2009-11-17 15:46:37
By :
tungman
3.ทีนี้เราจะให้ DropDownList สำหรับใช้เลือกหน้า โดยแต่ละหน้าจะมี 20 Record เมื่อเลือกหน้าก็แสดงก็ข้อมูลออกมา เช่น หน้า 1 ก็แสดง Record 1-20, หน้า 2 ก็แสดง Record 21-40 ซึ่ง จขกท ไม่ใช้ GridView เราก็เลยขอใช้ วนลูปแบบถึกๆ ซึ่งขอติกต่อ DataBase ก่อน
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //เพิ่ม namespace เพื่อใช้งาน SqlClient
public partial class Default : System.Web.UI.Page
{
private string SqlConnectionString;
private SqlConnection sqlConnection;
private SqlCommand sqlCommand;
DataTable DepartMain = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
DepartMain = QueryDepartMain();
}
protected DataTable QueryDepartMain()
{
SqlConnectionString = "Data Source=TUNGMAN;Initial Catalog=DataBaseSql;Integrated Security=True";
sqlConnection = new SqlConnection(SqlConnectionString);
sqlCommand = new SqlCommand("Select * From [tb_departmain] Order By [id] ASC");
DataTable dataTable = new DataTable();
try
{
SqlDataAdapter DataAdapter = new SqlDataAdapter(sqlCommand);
DataAdapter.Fill(dataTable);
}
catch (Exception e)
{
return null;
}
return dataTable;
}
}
Date :
2009-11-17 16:08:51
By :
tungman
4. ได้ตาราง tb_departmain มาเก็บไว้ใน DepartMain เรียบร้อย คราวนี้มาสร้าง table เพื่อแสดงข้อมูล โดยให้แสดงทีละ 20 Record
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //เพิ่ม namespace เพื่อใช้งาน SqlClient
public partial class Default : System.Web.UI.Page
{
private string SqlConnectionString;
private SqlConnection sqlConnection;
private SqlCommand sqlCommand;
DataTable DepartMain = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
DepartMain = QueryDepartMain();
Table Table1 = new Table();
Table1.Attributes.Add("Width", "100%");
Table1.CellPadding = 2;
Table1.CellSpacing = 2;
Table1.GridLines = GridLines.Both();
Page.Form.Controls.Add(Table1); //เแทรก Table1 ลงใน Page
TableHeaderRow HeaderRow = new TableHeaderRow();
Table1.Controls.Add(HeaderRow); //แทรก HeaderRow ลงใน Table1
TableHeaderCell HeaderIndex = new TableHeaderCell();
HeaderIndex.Text = "#";
HeaderIndex.HorizontalAlign = HorizontalAlign.Center;
HeaderIndex.Font.Bold = true;
HeaderIndex.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableHeaderCell HeaderSector = new TableHeaderCell();
HeaderSector.Text = "รหัสหน่วยงาน";
HeaderSector.HorizontalAlign = HorizontalAlign.Center;
HeaderSector.Font.Bold = true;
HeaderSector.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderSector); //แทรก HeaderSector ลงใน HeaderRow
TableHeaderCell HeaderPaernt = new TableHeaderCell();
HeaderPaernt.Text = "ชื่อหน่วยงานต้นสังกัด";
HeaderPaernt.HorizontalAlign = HorizontalAlign.Center;
HeaderPaernt.Font.Bold = true;
HeaderPaernt.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableHeaderCell HeaderEdit = new TableHeaderCell();
HeaderEdit.Text = "แก้ไข";
HeaderEdit.HorizontalAlign = HorizontalAlign.Center;
HeaderEdit.Font.Bold = true;
HeaderEdit.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderEdit); //แทรก HeaderEdit ลงใน HeaderRow
TableHeaderCell HeaderDelete = new TableHeaderCell();
HeaderDelete.Text = "ลบ";
HeaderDelete.HorizontalAlign = HorizontalAlign.Center;
HeaderDelete.Font.Bold = true;
HeaderDelete.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderDelete); //แทรก HeaderDelete ลงใน HeaderRow
if (!IsPostBack)
{
ShowData(0, Table1);
}
}
protected void ShowData(int StartIndex, Table DestinationTable)
{
for (int i = StartIndex; i < StartIndex + 20; i++)
{
int RecordIndex = i + 1;
DataRow Dr = DepartMain.Rows[i];
TableRow Row1 = new TableRow();
DestinationTable.Controls.Add(Row1);
TableCell CellIndex = new TableCell();
CellIndex.Text = RecordIndex.ToString();
Row1.Controls.Add(CellIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableCell CellSector = new TableCell();
CellSector.Text = Dr["departmain_id"].ToString();
Row1.Controls.Add(CellSector); //แทรก HeaderSector ลงใน HeaderRow
TableCell CellPaernt = new TableCell();
CellPaernt.Text = Dr["departmain_name"].ToString();
Row1.Controls.Add(CellPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableCell CellEdit = new TableCell();
Row1.Controls.Add(CellEdit); //แทรก HeaderEdit ลงใน HeaderRow
HyperLink EditLink = new HyperLink();
EditLink.ImageUrl = "~/images/edit_16x16.gif";
EditLink.NavigateUrl = "~/departmain.aspx?add=2&id_edit=" + Dr["id"].ToString();
CellEdit.Controls.Add(EditLink);
TableCell CellDelete = new TableCell();
Row1.Controls.Add(CellDelete); //แทรก HeaderDelete ลงใน HeaderRow
HyperLink DeleteLink = new HyperLink();
DeleteLink.ImageUrl = "~/images/delete_16x16.gif";
DeleteLink.NavigateUrl = "~/departmain.aspx?add=2&id_del=" + Dr["id"].ToString();
DeleteLink.Attributes.Add("OnClick", "return confirm(\"คุณต้องการลบใช่หรือไม่?\")");
CellDelete.Controls.Add(DeleteLink);
}
}
protected DataTable QueryDepartMain()
{
SqlConnectionString = "Data Source=TUNGMAN;Initial Catalog=DataBaseSql;Integrated Security=True";
sqlConnection = new SqlConnection(SqlConnectionString);
sqlCommand = new SqlCommand("Select * From [tb_departmain] Order By [id] ASC");
DataTable dataTable = new DataTable();
try
{
SqlDataAdapter DataAdapter = new SqlDataAdapter(sqlCommand);
DataAdapter.Fill(dataTable);
}
catch (Exception e)
{
return null;
}
return dataTable;
}
}
Date :
2009-11-17 16:50:08
By :
tungman
5. เพิ่ม DropDownList ให้เลือกหน้าได้ โดยต้องคำนวณจำนวนหน้าทั้งหมดก่อน
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //เพิ่ม namespace เพื่อใช้งาน SqlClient
public partial class Default : System.Web.UI.Page
{
private DataTable DepartMain = new DataTable();
private Table Table1;
private DropDownList SelectPage;
protected void Page_Load(object sender, EventArgs e)
{
DepartMain = QueryDepartMain();
SelectPage = new DropDownList();
SelectPage.AutoPostBack = true;
SelectPage.SelectedIndexChanged += new EventHandler(SelectPage_SelectedIndexChanged); //กำหนด Event ตอนเปลี่ยนแปลงค่า
Table1 = new Table();
Table1.Attributes.Add("Width", "100%");
Table1.CellPadding = 2;
Table1.CellSpacing = 2;
Table1.GridLines = GridLines.Both();
Page.Form.Controls.Add(Table1); //เแทรก Table1 ลงใน Page
TableHeaderRow HeaderRow = new TableHeaderRow();
Table1.Controls.Add(HeaderRow); //แทรก HeaderRow ลงใน Table1
TableHeaderCell HeaderIndex = new TableHeaderCell();
HeaderIndex.Text = "#";
HeaderIndex.HorizontalAlign = HorizontalAlign.Center;
HeaderIndex.Font.Bold = true;
HeaderIndex.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableHeaderCell HeaderSector = new TableHeaderCell();
HeaderSector.Text = "รหัสหน่วยงาน";
HeaderSector.HorizontalAlign = HorizontalAlign.Center;
HeaderSector.Font.Bold = true;
HeaderSector.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderSector); //แทรก HeaderSector ลงใน HeaderRow
TableHeaderCell HeaderPaernt = new TableHeaderCell();
HeaderPaernt.Text = "ชื่อหน่วยงานต้นสังกัด";
HeaderPaernt.HorizontalAlign = HorizontalAlign.Center;
HeaderPaernt.Font.Bold = true;
HeaderPaernt.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableHeaderCell HeaderEdit = new TableHeaderCell();
HeaderEdit.Text = "แก้ไข";
HeaderEdit.HorizontalAlign = HorizontalAlign.Center;
HeaderEdit.Font.Bold = true;
HeaderEdit.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderEdit); //แทรก HeaderEdit ลงใน HeaderRow
TableHeaderCell HeaderDelete = new TableHeaderCell();
HeaderDelete.Text = "ลบ";
HeaderDelete.HorizontalAlign = HorizontalAlign.Center;
HeaderDelete.Font.Bold = true;
HeaderDelete.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderDelete); //แทรก HeaderDelete ลงใน HeaderRow
if (!IsPostBack)
{
double TotalPage = Math.Ceiling(double.Parse(DepartMain.Rows.Count.ToString()) / 20); //หารเอาเศษ
for (int i = 0; i < int.Parse(TotalPage.ToString()); i++)
{
int aPage = i + 1;
SelectPage.Items.Add(new ListItem(aPage.ToString(), i.ToString()));
}
ShowData(0, Table1);
}
}
protected void SelectPage_SelectedIndexChanged(object sender, EventArgs e)
{
ShowData(20 * int.Parse(SelectPage.SelectedItem.Value), Table);
}
protected void ShowData(int StartIndex, Table DestinationTable)
{
for (int i = StartIndex; i < StartIndex + 20; i++)
{
int RecordIndex = i + 1;
DataRow Dr = DepartMain.Rows[i];
TableRow Row1 = new TableRow();
DestinationTable.Controls.Add(Row1);
TableCell CellIndex = new TableCell();
CellIndex.Text = RecordIndex.ToString();
Row1.Controls.Add(CellIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableCell CellSector = new TableCell();
CellSector.Text = Dr["departmain_id"].ToString();
Row1.Controls.Add(CellSector); //แทรก HeaderSector ลงใน HeaderRow
TableCell CellPaernt = new TableCell();
CellPaernt.Text = Dr["departmain_name"].ToString();
Row1.Controls.Add(CellPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableCell CellEdit = new TableCell();
Row1.Controls.Add(CellEdit); //แทรก HeaderEdit ลงใน HeaderRow
HyperLink EditLink = new HyperLink();
EditLink.ImageUrl = "~/images/edit_16x16.gif";
EditLink.NavigateUrl = "~/departmain.aspx?add=2&id_edit=" + Dr["id"].ToString();
CellEdit.Controls.Add(EditLink);
TableCell CellDelete = new TableCell();
Row1.Controls.Add(CellDelete); //แทรก HeaderDelete ลงใน HeaderRow
HyperLink DeleteLink = new HyperLink();
DeleteLink.ImageUrl = "~/images/delete_16x16.gif";
DeleteLink.NavigateUrl = "~/departmain.aspx?add=2&id_del=" + Dr["id"].ToString();
DeleteLink.Attributes.Add("OnClick", "return confirm(\"คุณต้องการลบใช่หรือไม่?\")");
CellDelete.Controls.Add(DeleteLink);
}
}
protected DataTable QueryDepartMain()
{
string SqlConnectionString = "Data Source=TUNGMAN;Initial Catalog=DataBaseSql;Integrated Security=True";
SqlConnection sqlConnection = new SqlConnection(SqlConnectionString);
SqlCommand sqlCommand = new SqlCommand("Select * From [tb_departmain] Order By [id] ASC", sqlConnection);
DataTable dataTable = new DataTable();
try
{
SqlDataAdapter DataAdapter = new SqlDataAdapter(sqlCommand);
DataAdapter.Fill(dataTable);
}
catch (Exception e)
{
return null;
}
return dataTable;
}
}
Date :
2009-11-17 17:01:42
By :
tungman
อันนี้แบบแก้ไข ครั้งสุดท้าย
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //เพิ่ม namespace เพื่อใช้งาน SqlClient
public partial class Default : System.Web.UI.Page
{
private DataTable DepartMain = new DataTable();
private Table Table1;
private DropDownList SelectPage;
protected void Page_Load(object sender, EventArgs e)
{
DepartMain = QueryDepartMain();
SelectPage = new DropDownList();
SelectPage.AutoPostBack = true;
SelectPage.SelectedIndexChanged += new EventHandler(SelectPage_SelectedIndexChanged); //กำหนด Event ตอนเปลี่ยนแปลงค่า
Table1 = new Table();
Table1.Attributes.Add("Width", "100%");
Table1.CellPadding = 2;
Table1.CellSpacing = 2;
Table1.GridLines = GridLines.Both();
Page.Form.Controls.Add(Table1); //เแทรก Table1 ลงใน Page
TableHeaderRow HeaderRow = new TableHeaderRow();
Table1.Controls.Add(HeaderRow); //แทรก HeaderRow ลงใน Table1
TableHeaderCell HeaderIndex = new TableHeaderCell();
HeaderIndex.Text = "#";
HeaderIndex.HorizontalAlign = HorizontalAlign.Center;
HeaderIndex.Font.Bold = true;
HeaderIndex.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableHeaderCell HeaderSector = new TableHeaderCell();
HeaderSector.Text = "รหัสหน่วยงาน";
HeaderSector.HorizontalAlign = HorizontalAlign.Center;
HeaderSector.Font.Bold = true;
HeaderSector.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderSector); //แทรก HeaderSector ลงใน HeaderRow
TableHeaderCell HeaderPaernt = new TableHeaderCell();
HeaderPaernt.Text = "ชื่อหน่วยงานต้นสังกัด";
HeaderPaernt.HorizontalAlign = HorizontalAlign.Center;
HeaderPaernt.Font.Bold = true;
HeaderPaernt.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableHeaderCell HeaderEdit = new TableHeaderCell();
HeaderEdit.Text = "แก้ไข";
HeaderEdit.HorizontalAlign = HorizontalAlign.Center;
HeaderEdit.Font.Bold = true;
HeaderEdit.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderEdit); //แทรก HeaderEdit ลงใน HeaderRow
TableHeaderCell HeaderDelete = new TableHeaderCell();
HeaderDelete.Text = "ลบ";
HeaderDelete.HorizontalAlign = HorizontalAlign.Center;
HeaderDelete.Font.Bold = true;
HeaderDelete.BackColor = System.Drawing.Color.CornflowerBlue;
HeaderRow.Controls.Add(HeaderDelete); //แทรก HeaderDelete ลงใน HeaderRow
if (!IsPostBack)
{
double TotalPage = Math.Ceiling(double.Parse(DepartMain.Rows.Count.ToString()) / 20); //หารเอาเศษ
for (int i = 0; i < int.Parse(TotalPage.ToString()); i++)
{
int aPage = i + 1;
SelectPage.Items.Add(new ListItem(aPage.ToString(), i.ToString()));
}
ShowData(0, Table1);
}
}
protected void SelectPage_SelectedIndexChanged(object sender, EventArgs e)
{
ShowData(20 * int.Parse(SelectPage.SelectedItem.Value), Table1);
}
protected void ShowData(int StartIndex, Table DestinationTable)
{
for (int i = StartIndex; i < StartIndex + 20; i++)
{
int RecordIndex = i + 1;
DataRow Dr = DepartMain.Rows[i];
TableRow Row1 = new TableRow();
DestinationTable.Controls.Add(Row1);
TableCell CellIndex = new TableCell();
CellIndex.Text = RecordIndex.ToString();
Row1.Controls.Add(CellIndex); //แทรก HeaderIndex ลงใน HeaderRow
TableCell CellSector = new TableCell();
CellSector.Text = Dr["departmain_id"].ToString();
Row1.Controls.Add(CellSector); //แทรก HeaderSector ลงใน HeaderRow
TableCell CellPaernt = new TableCell();
CellPaernt.Text = Dr["departmain_name"].ToString();
Row1.Controls.Add(CellPaernt); //แทรก HeaderPaernt ลงใน HeaderRow
TableCell CellEdit = new TableCell();
Row1.Controls.Add(CellEdit); //แทรก HeaderEdit ลงใน HeaderRow
HyperLink EditLink = new HyperLink();
EditLink.ImageUrl = "~/images/edit_16x16.gif";
EditLink.NavigateUrl = "~/departmain.aspx?add=2&id_edit=" + Dr["id"].ToString();
CellEdit.Controls.Add(EditLink);
TableCell CellDelete = new TableCell();
Row1.Controls.Add(CellDelete); //แทรก HeaderDelete ลงใน HeaderRow
HyperLink DeleteLink = new HyperLink();
DeleteLink.ImageUrl = "~/images/delete_16x16.gif";
DeleteLink.NavigateUrl = "~/departmain.aspx?add=2&id_del=" + Dr["id"].ToString();
DeleteLink.Attributes.Add("OnClick", "return confirm(\"คุณต้องการลบใช่หรือไม่?\")");
CellDelete.Controls.Add(DeleteLink);
}
}
protected DataTable QueryDepartMain()
{
string SqlConnectionString = "Data Source=TUNGMAN;Initial Catalog=DataBaseSql;Integrated Security=True";
SqlConnection sqlConnection = new SqlConnection(SqlConnectionString);
SqlCommand sqlCommand = new SqlCommand("Select * From [tb_departmain] Order By [id] ASC", sqlConnection);
DataTable dataTable = new DataTable();
try
{
SqlDataAdapter DataAdapter = new SqlDataAdapter(sqlCommand);
DataAdapter.Fill(dataTable);
}
catch (Exception e)
{
return null;
}
return dataTable;
}
}
Date :
2009-11-17 17:08:09
By :
tungman
ลองใช้ GridView แล้ว Code จะสั้นกว่านี้มากโขเลยนะครับ
Date :
2009-11-17 17:25:47
By :
tungman
ผมก็ใช้ Datagrid ไม่เห็นต้องเขียน Code ยาวซะขนาดนี้เลย เพราะ DataGrid มันก็มีให้เลือกหน้าได้อยู่แล้วไง แต่คุณไม่เอามาใช้กัน ถ้าต้องการเปลี่ยนหน้า ก็แค่ใช้ Code 2 บรรทัด... อยากรู้ส่งเมล์มาบอกได้ที่ [email protected] ครับ แล้วเดี๋ยวจะกลับมา Post ตัวอย่างให้ (ไม่รู้ยังมีคนอ่านบอร์ดอยู่หรือเปล่าไง เพราะเดี๋ยวเสียเวลา Post ไปแต่ไม่มีใครมาอ่านแล้ว...)
Date :
2010-04-09 08:51:16
By :
JC
แต่ผมว่าเขียน asp.net แบบ asp ธรรมดาๆ หรือ php จะดีไซน์ได้สะดวกกว่านะ
Date :
2010-04-10 18:03:33
By :
asp.net for designer
เทพๆทั้งนั้น ปลื้มมากครับ โดยเฉพาะคุณ tungman - 0 - นับถือๆ
Date :
2010-04-10 21:13:54
By :
superway
ผมเองก็คิดแบบ No. 9 ครับ
แต่ก็ สะดวกใคร สะดวกมัน ขอให้ได้ผลลัพธ์ ก่อน เรื่องอื่นๆ ค่อยมาว่ากันทีหลัง
Date :
2011-12-22 06:13:53
By :
eayx
Load balance : Server 02