2013-03-22 1 views
0

GridView에서 lbl 필드 텍스트를 동적으로 정렬하기위한 정렬을 활성화하는 방법. 아래는 동적 레이블 필드의 값을 설정하는 GridView 및 .cs 코드의 코드입니다. 문제는 다른 템플리트와 유사한이 asp : template에 대한 정렬 식을 적용 할 수 없다는 것입니다.GridView에서 lbl 필드를 동적으로 추가하기위한 정렬

<asp:GridView ID="gvAlertsStatus" runat="server" AllowSorting="true" 
    OnSorting="gvAlertsStatus_Sorting" AutoGenerateColumns="false" 
    OnRowDataBound="gvAlertsStatus_RowDataBound"> 
    <Columns> 
     <asp:TemplateField HeaderText="Owner" SortExpression="UsrName" 
      ItemStyle-Width="120px"> 
      <ItemTemplate><%#Eval("UsrName") %></ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Last Result" SortExpression="lblLastResult" 
      ItemStyle-Width="40px" ItemStyle-HorizontalAlign="Center"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="lblLastResult" Font-Bold="true"> 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Active" SortExpression="Active" 
      ItemStyle-Width="60px" > 
      <ItemTemplate> 
       <asp:Label runat="server" ID="lblActive" 
        Text='<%#Eval("Active") %>' > 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

.aspx.cs 코드

public void gvAlertsStatus_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex >= 0) 
    { 
     Label lblLastResult = (Label)e.Row.FindControl("lblLastResult"); 
     // Get the dates 
     DateTime dtSuccess = (eScan.Lib.Shared.Utils.IsDate(lblSuccess.Text)) ? 
      DateTime.Parse(lblSuccess.Text) : DateTime.MinValue; 
     DateTime dtFailure = (eScan.Lib.Shared.Utils.IsDate(lblFailure.Text)) ? 
      DateTime.Parse(lblFailure.Text) : DateTime.MinValue; 
     DateTime dtDelay = (eScan.Lib.Shared.Utils.IsDate(lblDelay.Text)) ? 
      DateTime.Parse(lblDelay.Text) : DateTime.MinValue; 
     DateTime dtLastRun = (dtSuccess > dtFailure) ? dtSuccess : dtFailure; 

     // Set up the Last Result label 
     lblLastResult.Text = (dtSuccess > dtFailure) ? "Success" : "Fail";    
    } 
} 

protected void gvAlertsStatus_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    // Set up the sort direction 
    SortDirection sd = SortDirection.Ascending; 

    // If the same column is clicked, then alternate sort direction 
    if (e.SortExpression.Equals(ViewState["SortExp"])) 
    { 
     sd = ((SortDirection)ViewState["SortDir"] == SortDirection.Descending) ? 
      SortDirection.Ascending : SortDirection.Descending; 
    } 

    // Save the states 
    ViewState["SortExp"] = e.SortExpression; 
    ViewState["SortDir"] = sd; 

    // Sort the view and rebind that 
    DataView dv = (DataView)gvAlertsStatus.DataSource; 
    dv.Sort = e.SortExpression + " " + 
     ((sd == SortDirection.Descending) ? "DESC" : "ASC"); 

    gvAlertsStatus.DataSource = dv; 
    gvAlertsStatus.DataBind(); 
} 
+0

당신은 무엇을 정렬하려고 발생하면? 오류 메시지가 나타나거나 단순히 아무 일도 일어나지 않습니까? – Melanie

+0

예 .. 오류가 발생합니다. 열 lblLastResult를 찾을 수 없습니다. System.IndexOutOfRangeException : lblLastResult 열을 찾을 수 없습니다. 코드에서이 줄을 가리킴 // 뷰를 정렬하고 다시 바인딩합니다. 줄 159 : DataView dv = (DataView) gvAlertsStatus.DataSource; 줄 160 : dv.Sort = e.SortExpression + ""+ ((sd == SortDirection.Descending)? "DESC": "ASC"); – user2051484

+0

@Melanie .. 전에 말했듯이 오류 메시지가 나타납니다. 시도해 볼만한 해결책이 있습니까? – user2051484

답변

0

이 코드를 사용해보십시오는 .........

protected void RadgvData_SortCommand(object sender, GridSortCommandEventArgs e) 
     { 
      GridTableView tableView = e.Item.OwnerTableView; 
      e.Canceled = true; 
      GridSortExpression expression = new GridSortExpression(); 
      expression.FieldName = e.SortExpression; 
      if (tableView.SortExpressions.Count == 0 || tableView.SortExpressions[0].FieldName != e.SortExpression) 
      { 
       expression.SortOrder = GridSortOrder.Descending; 
      } 
      else if (tableView.SortExpressions[0].SortOrder == GridSortOrder.Descending) 
      { 
       expression.SortOrder = GridSortOrder.Ascending; 
      } 
      else if (tableView.SortExpressions[0].SortOrder == GridSortOrder.Ascending) 
      { 
       expression.SortOrder = GridSortOrder.Descending; 
      } 

      tableView.SortExpressions.AddSortExpression(expression); 
      RadgvData.Rebind(); 

     } 
관련 문제