2014-06-06 5 views
0

SQL 소스에서 데이터를 가져 와서 Gridview를 채우는 DataTable이 있습니다. 초기 테이블 조작을하기 위해서는 순서가 중요하기 때문에 SQL 문에서 정렬하는 것은 옵션이 아닙니다.열이 자동으로 생성되지 않는 Gridview 정렬

사용자가 열을 클릭하고 해당 열의 값을 기준으로 gridview를 정렬 할 수있게하려고합니다. 내가 봤 거든이 많은 가이드를 찾았지만 아무도 실제로 나를 위해 작동합니다. 열은 절대로 클릭 할 수 없습니다. 이 비트의 코드로 다른 동작을 수행 할 수있는 클릭 가능한 행을 얻을 수 있었고, 이것이 어떤 간섭으로 연결되는지 궁금해하고 있습니다. 그렇다면 왜 클릭하여 행을 정렬 할 수 없습니까? 내 열이 자동으로 생성되지 않기 때문입니까? 클릭 행

에 대한

//은

if (e.Row.RowType == DataControlRowType.DataRow) { GridViewRow row = e.Row; DataRow data = ((DataRowView)row.DataItem).Row; e.Row.Attributes.Add("onmouseover","this.style.backgroundColor='#ceedfc'"); if (data.Field<string>("rowType") != "total") e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''"); e.Row.Attributes.Add("style", "cursor:pointer;"); e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(suiteReport, "Select$" + e.Row.RowIndex);

분류에서 내 시도는 내가 말한 것처럼 내가, this

의 기반으로하지만

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 suiteReport_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    string sortExpression = e.SortExpression; 

    if (GridViewSortDirection == SortDirection.Ascending) 
    { 
     GridViewSortDirection = SortDirection.Descending; 
     SortGridView(sortExpression, DESCENDING); 
    } 
    else 
    { 
     GridViewSortDirection = SortDirection.Ascending; 
     SortGridView(sortExpression, ASCENDING); 
    } 

} 

private void SortGridView(string sortExpression,string direction) 
{ 

    DataTable dt = (DataTable)Session["QueryTable"]; 

    DataView dv = new DataView(dt); 
    dv.Sort = sortExpression + direction;   

    suiteReport.DataSource = dv; 
    suiteReport.DataBind();   
} 

는,이 갖고있는 것 같아요입니다 gridview에 영향을 미치지 않습니다. aspx 파일에서 "AllowSorting"특성이 true이고 OnSorting이 suiteReport_Sorting을 호출합니다.

내가 무슨 문제인지 모르겠다. 그래서 어떤 도움을 주시면 감사하겠습니다.

내가 포함시키지 않은 코드가 있으면 알려 주시기 바랍니다.

당신에게

편집 감사합니다 (! Page.IsPostBack) : 여기 인 내가 다시

` {

  try 
      { 
       cn1.Open(); 

       cmd1 = new SqlCommand("sp_UpdateUsageLog", cn1); 
       cmd1.CommandType = CommandType.StoredProcedure; 
       cmd1.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar)).Value = userName; 
       cmd1.Parameters.Add(new SqlParameter("@userIpAddress", SqlDbType.VarChar)).Value = userIpAddress; 
       cmd1.Parameters.Add(new SqlParameter("@userComputerName", SqlDbType.VarChar)).Value = userComputerName; 
       cmd1.Parameters.Add(new SqlParameter("@pageViewed", SqlDbType.VarChar)).Value = "Store Report Card"; 
       cmd1.Parameters.Add(new SqlParameter("@visitDate", SqlDbType.DateTime)).Value = DateTime.Now; 

       cmd1.ExecuteNonQuery(); 
      } 
      catch { } 
      finally 
      { 
       cn1.Close(); 
      } 

EDIT2가있는 경우 게시물을 처리하는 방법을 여기에있다 gridview에 대한 aspx :

<asp:GridView ID="suiteReport" AutoGenerateColumns="false" ShowFooter="true" runat="server" OnRowDataBound="suiteReport_RowDataBound" OnSelectedIndexChanged="suiteReport_SelectedIndexChanged" AllowSorting="true" OnSorting="suiteReport_Sorting"> 

+0

oyu가 포스트 백 이벤트를 올바르게 캡처하고 페이지를 새로 작성하지 못하게합니까? –

+0

@ Dean.DePue Page.IsPostBack을 잡을 수는 있지만, "페이지를 새로 작성하게하지 마라"는 것은 무엇을 의미합니까? – atallest

+0

포스트 백일 때 무엇을합니까? 그리드에 똑같은 정렬이 나타 납니까? –

답변

0

나는 그것을 이해했거나 적어도 충분한 진전을 이루었다 고 생각합니다. 내 머리글 행을 클릭 할 수없는 이유는 바운드 필드에 SortExpressions을 추가하지 않았기 때문입니다. 동적으로 열을 구축 했으므로 Gridview의 헤더를 반복하면서 새로운 바운드 필드를 작성하고 BoundField에 SortExpression (myBoundField.SortExpression = "headerName")을 지정하여이 작업을 수행했습니다.

잘하면 이것은 또한 붙어 있던 누군가를 돕는다.