datagrid的SortCommand里加以下代码就OK了
数据集为dataset
if (ViewState["SortDirect"] == null || ViewState["SortDirect"].ToString() == "ASC")
{
ViewState["SortDirect"] = "DESC";
}
else
{
ViewState["SortDirect"] = "ASC";
}
conn.m_DataView.Sort = e.SortExpression + " " + ViewState["SortDirect"];
ListDg.DataBind();
数据集为dataset
if (ViewState["SortDirect"] == null || ViewState["SortDirect"].ToString() == "ASC")
{
ViewState["SortDirect"] = "DESC";
}
else
{
ViewState["SortDirect"] = "ASC";
}
conn.m_DataView.Sort = e.SortExpression + " " + ViewState["SortDirect"];
ListDg.DataBind();
请看:
<asp:TemplateColumn SortExpression="WRITED_DATETIME">
<HeaderTemplate>
<asp:ImageButton id="sortbtn" ImageUrl="images/arrow_down.gif" Runat="server" CommandName="sort"></asp:ImageButton>
</HeaderTemplate>
<ItemStyle Width="88px"></ItemStyle>
<ItemTemplate>
<asp:Label ID="lbltime" CssClass="ft" Runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
=================================================================================另外还有一个向上的图标arrow_top.gif就是排序时这个图标互相调换。
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;namespace Greystar.Base.WebTools
{
/// <summary>
/// DataGridCtl 的摘要说明。
/// 此类将实现对DATAGRID的控制
/// </summary>
public class DataGridCtl
{
public DataGridCtl()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private DataSet m_DataSource=null;//最终绑定的数据集
private string m_URL=""; //最终跳转到的页面
private int m_sCol=0; //开始列----》点击页面的行后将跳转的开始列
private int m_eCol=0; //结束列
private System.Web.UI.WebControls.DataGrid m_Grd=null; //所要控制的DATAGRID
private int m_PageSize=10; //页的尺寸
private string m_GoToTarget="_self"; //跳转框架
private string m_SortField=""; //排序字段
private string m_DataGuid=""; //数据主键
private string m_SortBy=" ASC"; //顺序排列
private string m_MouseColor="#b7c4e2"; //mouse color
/// <summary>
/// 当Mouse在表格上移动时当前行所出现的色彩
/// </summary>
public string MouseColor
{
get
{
return m_MouseColor;
}
set
{
m_MouseColor=value;
}
}
/// <summary>
/// DATAGRID的分页尺寸
/// </summary>
public int PageSize
{
get
{
return m_PageSize;
}
set
{
m_PageSize=value;
} }
public string SortBy
{
get
{
return m_SortBy;
}
set
{
m_SortBy=value;
}
} /// <summary>
/// 数据主键
/// </summary>
public string DataGuid
{
get
{
return m_DataGuid;
}
set
{
m_DataGuid=value;
}
} /// <summary>
/// 对DATAGRID的字段进行排序
/// </summary>
public string SortField
{
get
{
return m_SortField;
}
set
{
m_SortField=value;
}
} /// <summary>
/// 跳转框架
/// </summary>
public string GoToTarget
{
get
{
return m_GoToTarget;
}
set
{
m_GoToTarget=value;
}
} /// <summary>
/// 设定控件
/// </summary>
public DataGrid GrdControl
{
set
{
m_Grd=value;
}
get
{
return m_Grd;
}
}
/// <summary>
/// 绑定的数据集
/// </summary>
public DataSet DataSource
{
set
{
m_DataSource=value;
}
get
{
return m_DataSource;
}
}
/// <summary>
/// 要跳转的地址
/// </summary>
public string URL
{
get
{
return m_URL;
}
set
{
m_URL=value;
}
} /// <summary>
/// 开始要跳转的列
/// </summary>
public int StartCol
{
get
{
return m_sCol;
}
set
{
m_sCol=value;
}
} /// <summary>
/// 最后要跳转的列
/// </summary>
public int EndCol
{
get
{
return m_eCol;
}
set
{
m_eCol=value;
}
}
#region GridDataBind(int CurrentPage)
/// <summary>
/// 页面加载时初始化GRID
/// </summary>
public void GridDataBind(int CurrentPage)
{
this.GrdControl.AllowPaging=true;
DataView pd=DataSource.Tables[0].DefaultView; //数据源
pd.Sort=pd.Table.Columns[1].ToString() + " " +this.SortBy; //默认规则是第一列升序
if(this.GrdControl.Attributes["SortField"]==null)
{
this.GrdControl.Attributes.Add("SortField","");
//this.GrdControl.Attributes.Add("CurrentPage","0");//给引用的控件加上当前页索引
// this.GrdControl.Attributes.Add("SortField","");//排索字段
}
//如果指定排序规则
if(this.SortField!="")
{
this.SortField=this.SortField.Replace("▲","");
this.SortField=this.SortField.Replace("▼","");
int sortfieldindex=0;
for( int i=0 ;i<this.DataSource.Tables[0].Columns.Count;i++)
{
if(DataSource.Tables[0].Columns[i].ColumnName==this.SortField)
{
sortfieldindex=i;
break;
}
}
if(this.GrdControl.Attributes["SortField"]!=null)
{
if(this.SortField==this.GrdControl.Attributes["SortField"].ToString().Trim())
{
if(GrdControl.Attributes["SortBy"].Trim().ToString()=="DESC")
{
this.SortBy=" ASC";
}
else
{
this.SortBy=" DESC";
}
}
else
{
this.SortField=SortField;
this.SortBy=" ASC";
}
}
else
{
this.SortField=SortField;
this.SortBy=" ASC";
}
pd.Sort=this.SortField + this.SortBy;
this.GrdControl.Attributes["SortField"]=this.SortField; //哪个是排序字段
this.GrdControl.Attributes["SortBy"]= this.SortBy;//排序规则
string SortDirectionImg="▲";
if(this.SortBy==" DESC")
{
SortDirectionImg="▼";
}
DataSource.Tables[0].Columns[sortfieldindex].ColumnName+=SortDirectionImg;
// pd.Sort=DataSource.Tables[0].Columns[sortfieldindex].ColumnName.ToString() + " " +this.SortBy;
}
this.GrdControl.AllowPaging=true;
this.GrdControl.PageSize=this.PageSize;
this.GrdControl.CurrentPageIndex=CurrentPage;//当前索引
this.GrdControl.DataSource=pd;
this.GrdControl.DataBind();
this.GrdControl.Attributes.Add("CurrentPage",CurrentPage.ToString());
//如果有跳转的页面
if(this.URL.Trim()!="")
{
foreach(DataGridItem item in this.GrdControl.Items)
{
for(int i=this.StartCol;i<this.EndCol;i++)
{
//设跳转页面时要设的参数如:"javascript:self.location.href=aa.aspx?主要参数名=" 加上当前主键的值
item.Cells[i].Attributes.Add("onclick",this.URL+this.GrdControl.DataKeys[item.ItemIndex].ToString());
item.Cells[i].Attributes.Add("Style","cursor:hand;");
}
}
}
//加上光标色彩
foreach(DataGridItem item in this.GrdControl.Items)
{
item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='"+ this.MouseColor +"'");
item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");
} }
#endregion public void GoFirstPage()
{
//
}
}
}
只能实现自动生成的列,绑定列就不可以了。有谁可以帮着改一下吗。
一个控制类