2013-11-28 74 views
2

我google了很多次,但沒有任何有用的鏈接爲我的解決方案。我有AllwSorting =「true」和OnSort函數。今天我發佈這個問題,謝謝你的幫助。 這是我的ASCX:gridview中的排序事件未解僱

<asp:GridView ID="gvwCus" runat="server" CssClass="gridview" AlternatingRowStyle-CssClass="even" AutoGenerateColumns="false" GridLines="Vertical" AllowPaging="false" OnRowCommand="RowCommand" AllowSorting="true" OnSorting="gvwCus_OnSorting"> 
    <Columns> 
    <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%"> 
     <HeaderTemplate>STT</HeaderTemplate> 
     <ItemTemplate> 
      <asp:Label ID="lblId" runat="server" Text="<%#Container.DataItemIndex + 1%>"></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:BoundField HeaderStyle-Width="12%" DataField="field1" HeaderText="Field1_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
    <asp:BoundField HeaderStyle-Width="30%" DataField="field2" HeaderText="Field2_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
    <asp:BoundField HeaderStyle-Width="31%" DataField="field3" HeaderText="Field3_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
    <asp:BoundField HeaderStyle-Width="20%" DataField="field4" HeaderText="Field4_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center" /> 
    <asp:CommandField HeaderStyle-Width="2%" ButtonType="Image" SelectImageUrl="~/Images/detail.png" ShowSelectButton="true" /> 
    </Columns> 
</asp:GridView> 

而且我後面的代碼:ASCX.CS,我有一個排序事件gvwCus_OnSorting功能,但沒有任何事件的處理,當我點擊GridView控件的標題。

protected void gvwCus_OnSorting(object sender, GridViewSortEventArgs e) 
{ 
    DataBind(e); 
} 

private void DataBind(GridViewSortEventArgs eventArgs) 
{ 
    var dataOracle = new DataOracle(); 
    var data = dataOracle.GetDataTable(); 
    if(eventArgs != null) 
    { 
     data.DefaultView.Sort = eventArgs.SortExpression + " " + GetSortDirection(eventArgs.SortExpression); 
    } 
    gvwCustom.DataSource = data; 
    gvwCustom.DataBind(); 
} 

private string GetSortDirection(string column) 
{ 
string sortDirection = "DESC"; 
string sortExpression = ViewState["SortExpression"] as string; 

if (sortExpression != null) 
{ 
    if (sortExpression == column) 
    { 
     string lastDirection = ViewState["SortDirection"] as string; 
     if ((lastDirection != null) && (lastDirection == "DESC")) 
     { 
      sortDirection = "ASC"; 
     } 
    } 
} 

ViewState["SortDirection"] = sortDirection; 
ViewState["SortExpression"] = column; 

return sortDirection; 
} 

謝謝!!

+0

你怎麼知道該事件不觸發? – NoChance

+0

@EmmadKareem:我在gvwCus_OnSorting函數中加入了斷點。 – PhamMinh

+0

那麼網格對數據進行排序,但事件並未發射?你的綁定代碼在哪裏? – NoChance

回答

2

對於要排序的列,您並未設置SortExpression。添加SortExpression,你會看到每個列的超鏈接。點擊這些鏈接將觸發排序事件。添加的SortExpression後您綁定列應該是這樣的:

<asp:BoundField SortExpression="field1" HeaderStyle-Width="12%" DataField="field1" HeaderText="Field1_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
<asp:BoundField SortExpression="field2" HeaderStyle-Width="30%" DataField="field2" HeaderText="Field2_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
<asp:BoundField SortExpression="field3" HeaderStyle-Width="31%" DataField="field3" HeaderText="Field3_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center"/> 
<asp:BoundField SortExpression="field4" HeaderStyle-Width="20%" DataField="field4" HeaderText="Field4_Header" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Center" /> 

渲染的標題應如下:

enter image description here

+0

太棒了。非常感謝!! – PhamMinh