【问题标题】:GridView Sorting CssClass not applyingGridView排序CssClass不适用
【发布时间】:2011-12-01 10:43:39
【问题描述】:

我有一个带有以下标记的网格视图:

<asp:GridView ID="gv" runat="server" Width="700px" skinid="gridview" HeaderStyle-HorizontalAlign="Left" AllowPaging="true" PageSize="50" AllowSorting="true" CssClass="gv">
<SortedAscendingHeaderStyle CssClass="sort_asc" />
<SortedDescendingHeaderStyle CssClass="sort_desc" />
<Columns>

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="chk" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

<asp:BoundField HeaderText="Project" DataField="Project" SortExpression="Project" />
<asp:BoundField HeaderText="Type" DataField="Type" SortExpression="Type" />

</Columns>
</GridView>

但是,我的 SortedAscendingHeaderStyleSortedDescendingHeaderStyle CssClass 在排序时并未应用于 HTML。

我的 CSS 是:

.gv .sort_asc
{
    display:block;
    padding:0 4px 0 15px; 
   background:url(/Admin/Images/Icons/arrow_down.jpg) no-repeat;  
}
.gv .sort_desc
{
    display:block;
    padding:0 4px 0 15px; 
   background:url(/Admin/Images/Icons/arrow_up.jpg) no-repeat;  
}

这可能是什么原因?

【问题讨论】:

  • 似乎您想将向上/向下箭头设置为单击(排序)列标题!所以,这些方式我的代码可以正常工作,只需将 css 放到特定列而不是所有列,在这里我看到标题样式处理这些更改,所以请尝试更改为您的特定列并让我知道,谢谢您的时间.
  • 我不明白为什么它仍然不能正常工作?我的代码有什么问题?我们不应该为此采取解决方法,但我非常感谢您的时间和精力。
  • 这里的代码相同,但类不适用我从这个链接复制了代码:blogs.msdn.com/b/scothu/archive/2010/08/28/…

标签: asp.net sorting gridview


【解决方案1】:

下面是方法,可以完成任务:

在 .aspx 文件中

<asp:GridView ID="gvData" runat="server" SkinID="yourskinID"
   AllowSorting="True" onsorting="gvData_Sorting">
   <HeaderStyle CssClass="ascendingCssClass" /> <%-- put it into your SKIN file, 
       assume you're showing data in ascending initially  --%>
   <Columns>

   </Columns>
</asp:GridView>

在 .cs 文件中

private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null)
            ViewState["sortDirection"] = SortDirection.Ascending;

        return (SortDirection)ViewState["sortDirection"];
    }
    set { ViewState["sortDirection"] = value; }
}

protected void gvData_Sorting(object sender, GridViewSortEventArgs e)
{
    string sortExpression = e.SortExpression;
    if (GridViewSortDirection == SortDirection.Ascending)
    {
        GridViewSortDirection = SortDirection.Descending;
        //Put your CssClass here for descending
        gvData.HeaderStyle.CssClass = "descendingCssClass";
        SortGridView(sortExpression, DESCENDING);
    }
    else
    {
        GridViewSortDirection = SortDirection.Ascending;
        //Put your CssClass here for ascending
        gvData.HeaderStyle.CssClass = "ascendingCssClass";
        SortGridView(sortExpression, ASCENDING);
    }
}

private void SortGridView(string sortExpression, string direction)
{
    DataTable dt = GetData();
    DataView dv = new DataView(dt);
    dv.Sort = sortExpression + direction;
    gvData.DataSource = dv;
    gvData.DataBind();
}

更新:

示例/测试 css 如下所示:我只是将其用于测试目的,请使用您适当的样式。

 tr.ascendingCssClass th a:link
 {
    color:Green;
    background-color:White;
 }    
 tr.ascendingCssClass th a:hover
 {
    color:Orange;
    background-color:White;
 }     
 tr.ascendingCssClass th a:visited
 {
     color:Black;
     background-color:White;
 }


 tr.descendingCssClass th a:link
 {
     color: red;
     background-color:Gray;
 }    
 tr.descendingCssClass th a:hover
 {
     color: Yellow;
     background-color:Gray;
 }     
 tr.descendingCssClass th  a:visited
 {
     color: Yellow;
     background-color:Gray;
 }

并且,DataTable 函数如下:

DataTable GetData()
{
    DataTable table = new DataTable("MyDataTable");
    using (SqlConnection connection = new SqlConnection(YourConnectionString))
    {
        //Your data retrival code goes here
        adapter.Fill(table); // Finally fill the datatable
    }
    return table;
}

【讨论】:

  • 我已经尝试过了,但没有成功。此外,我认为您可以通过将皮肤文件中的任何样式添加到标记中来覆盖它(就像我指定 Width 一样),所以它不应该有任何区别。
  • 在您点击订购的Header Section中,有a标签,您需要考虑a并写适当的cssa除非标签a获取默认 CSS。请您再试一次并相应地更新我,谢谢您的时间。
  • 如何访问a 标签?我相信这是从 GridView 控件自动呈现的。
  • 我正在重新编辑和发布ans,请尝试使用最新版本,也请让我知道更新,感谢您的时间。
  • 如果编辑后的答案现在可以正常工作,请告诉我,谢谢您的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2016-08-04
  • 2016-07-31
相关资源
最近更新 更多