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();

解决方案 »

  1.   

    谢谢 zhangqy(zhangqy),我说的不是这个意思。
    请看: 
    <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就是排序时这个图标互相调换。
      

  2.   

    using System;
    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()
    {
    //
    }

    }
    }
    只能实现自动生成的列,绑定列就不可以了。有谁可以帮着改一下吗。
    一个控制类