|
|
|
การ sort data ใน gridview คือผมต้องการ sort ข้อมูลใน gridview อะครับ คือผมเคยเห็นแบบว่า |
|
|
|
|
|
|
|
Code (C#)
<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
String strFields = "CustomerID";
void Page_Load(object sender,EventArgs e)
{
if(!Page.IsPostBack)
{
BindData();
}
}
void BindData()
{
OleDbConnection objConn = new OleDbConnection();
OleDbCommand objCmd = new OleDbCommand();
OleDbDataAdapter dtAdapter = new OleDbDataAdapter();
DataSet ds = new DataSet();
String strConnString,strSQL;
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("database/mydatabase.mdb") + ";";
strSQL = "SELECT * FROM customer ORDER BY " + strFields + " ASC";
objConn.ConnectionString = strConnString;
objCmd.Connection = objConn;
objCmd.CommandText = strSQL;
objCmd.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds);
//*** BindData to GridView ***//
myGridView.DataSource = ds;
myGridView.DataBind();
dtAdapter = null;
objConn.Close();
objConn = null;
}
void SortCommand(Object s, GridViewSortEventArgs e)
{
strFields = e.SortExpression;
BindData();
}
void myGridView_RowDataBound(Object s, GridViewRowEventArgs e)
{
//*** CustomerID ***//
Label lblCustomerID = (Label)(e.Row.FindControl("lblCustomerID"));
if (lblCustomerID != null)
{
lblCustomerID.Text = (string)DataBinder.Eval(e.Row.DataItem, "CustomerID");
}
//*** Email ***//
Label lblName = (Label)(e.Row.FindControl("lblName"));
if (lblName != null)
{
lblName.Text = (string)DataBinder.Eval(e.Row.DataItem, "Name");
}
//*** Name ***//
Label lblEmail = (Label)(e.Row.FindControl("lblEmail"));
if (lblEmail != null)
{
lblEmail.Text = (string)DataBinder.Eval(e.Row.DataItem, "Email");
}
//*** CountryCode ***//
Label lblCountryCode = (Label)(e.Row.FindControl("lblCountryCode"));
if (lblCountryCode != null)
{
lblCountryCode.Text = (string)DataBinder.Eval(e.Row.DataItem, "CountryCode");
}
//*** Budget ***//
Label lblBudget = (Label)(e.Row.FindControl("lblBudget"));
if (lblBudget != null)
{
lblBudget.Text = DataBinder.Eval(e.Row.DataItem, "Budget").ToString();
}
//*** Used ***//
Label lblUsed = (Label)(e.Row.FindControl("lblUsed"));
if (lblUsed != null)
{
lblUsed.Text = DataBinder.Eval(e.Row.DataItem, "Used").ToString();
}
}
</script>
<html>
<head>
<title>ThaiCreate.Com ASP.NET - GridView</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView id="myGridView" runat="server"
AllowSorting="True" OnSorting="SortCommand"
AutoGenerateColumns="False" onRowDataBound="myGridView_RowDataBound">
<Columns>
<asp:TemplateField SortExpression="CustomerID" HeaderText="CustomerID">
<ItemTemplate>
<asp:Label id="lblCustomerID" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Name" HeaderText="Name">
<ItemTemplate>
<asp:Label id="lblName" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Email" HeaderText="Email">
<ItemTemplate>
<asp:Label id="lblEmail" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="CountryCode" HeaderText="CountryCode">
<ItemTemplate>
<asp:Label id="lblCountryCode" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Budget" HeaderText="Budget">
<ItemTemplate>
<asp:Label id="lblBudget" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Used" HeaderText="Used">
<ItemTemplate>
<asp:Label id="lblUsed" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
Ref : (C#) ASP.NET GridView Control - AllowSorting
|
|
|
|
|
Date :
2009-05-07 06:25:42 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อย่างนี้เราก็ต้อง ระบุไว้ดิครับว่า
ต้อง sort คอลัมน์ไหน
คือผมต้อง sort ได้ทุกคอลัมน์ อะครับ
โดยการคลิกที่หัวคอลัมน์
พอจะมีวิธีอื่นมั๊ยครับ
|
|
|
|
|
Date :
2009-05-07 11:42:43 |
By :
mixarstudio |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผม sort ได้แล้วครับ
แต่ติดปัญหาอีกนิดนึงอะครับ
คือเวลา sort default มันจะเรียงแบบ ASC
แต่ที่อยากทำอีกนิดนึงก็คือ
พอเรียง ASC แล้ว
เวลากดที่หัวคอลัมน์นั้นอีกที
มันจะต้องเรียงเป็น DESC
ผมก็เลยใช้ viewstate เข้ามาช่วย
แต่มันยังไม่ได้อะครับ
ยังคงเหมือนเดิม
คือ กดยังไงก็เรียงแบบ ASC
อันนี้โค้ด ผมครับ
Code (C#)
1 protected void SortData(Object sender, GridViewSortEventArgs e)
2 {
3 if (e.SortExpression == ViewState["sortField"])
4 {
5 Page.RegisterStartupScript("Alert", "<script>alert('TEST IF !!');</script>");
6 if (ViewState["sortDirection"] == "ASC")
7 {
8 ViewState["sortDirection"] = "DESC";
9 }
10 else
11 {
12 ViewState["sortDirection"] = "ASC";
13 }
14 }
15 else
16 {
17 ViewState["sortField"] = e.SortExpression;
18 ViewState["sortDirection"] = "ASC";
19 }
20
21 BindGridControl(e.SortExpression, ViewState["sortDirection"].ToString());
22 }
ช่วยผมดูหน่อยนะครับ
ว่าตรงไหนมันผิดอะครับ
|
|
|
|
|
Date :
2009-05-07 22:19:01 |
By :
mixarstudio |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ mixar อันนี้คือโค้ดทั้งหมดในการ sort หรือเปล่าวค๊ะ รบกวนขอตัวอย่างหน่อยนะคะ
|
|
|
|
|
Date :
2009-06-24 12:13:02 |
By :
ิblossom |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ของผมใช้ hidden field อ่ะครับ
คลิ๊กที่หัวของ column
public void SortCommand(object s, GridViewSortEventArgs e)
{
strFields = e.SortExpression;
qs = inputCus.Text;
if (cIDHiddenField.Value == strFields)
{
if (orderHiddenField.Value == "DESC")
{
orderHiddenField.Value = "ASC";
}
else
{
orderHiddenField.Value = "DESC";
}
}
cIDHiddenField.Value = strFields;
BindData();
}
Code Bind Data
public void BindData()
{
cusDataSource.SelectCommand = "SELECT * " +
" FROM C_MS " +
" ORDER BY " + strFields + " " + orderHiddenField.Value;
GridView1.DataSource = cusDataSource;
GridView1.DataBind();
}
|
|
|
|
|
Date :
2009-07-10 11:47:06 |
By :
Patis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'jv;;;;;;;;;
|
|
|
|
|
Date :
2017-10-04 11:20:36 |
By :
hjklopopo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|