2013-08-02 2 views
1

Я должен отображать и извлекать стопку 100k +.Добавление пейджинга в мой ASP.NET GridView

Я использовал GridView, но его не показывали данные как memoryException.

Поэтому я хочу добавить пейджинговую систему в свой GridView. Я пробовал различные учебные пособия, но все обложки, когда страница загружается с gridview. Но в моем случае GridView загружается по запросу при нажатии кнопки.

Как связать мой код для подкачки, поэтому каждая страница показывает 10 - 20 записей?

вот мой код-за:

protected void ExportToExcel(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=Pfilename.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 

    using (StringWriter sw = new StringWriter()) 
    { 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 

     //To Export all pages 
     GridView1.AllowPaging = false; 


     GridView1.HeaderRow.BackColor = Color.White; 
     foreach (TableCell cell in GridView1.HeaderRow.Cells) 
     { 
      cell.BackColor = GridView1.HeaderStyle.BackColor; 
     } 
     foreach (GridViewRow row in GridView1.Rows) 
     { 
      row.BackColor = Color.White; 
      foreach (TableCell cell in row.Cells) 
      { 
       if (row.RowIndex % 2 == 0) 
       { 
        cell.BackColor = GridView1.AlternatingRowStyle.BackColor; 
       } 
       else 
       { 
        cell.BackColor = GridView1.RowStyle.BackColor; 
       } 
       cell.CssClass = "textmode"; 
       List<Control> controls = new List<Control>(); 

       //Add controls to be removed to Generic List 
       foreach (Control control in cell.Controls) 
       { 
        controls.Add(control); 
       } 

       //Loop through the controls to be removed and replace then with Literal 
       foreach (Control control in controls) 
       { 
        switch (control.GetType().Name) 
        { 
         case "HyperLink": 
          cell.Controls.Add(new Literal { Text = (control as HyperLink).Text }); 
          break; 
         case "TextBox": 
          cell.Controls.Add(new Literal { Text = (control as TextBox).Text }); 
          break; 
         case "LinkButton": 
          cell.Controls.Add(new Literal { Text = (control as LinkButton).Text }); 
          break; 
         case "CheckBox": 
          cell.Controls.Add(new Literal { Text = (control as CheckBox).Text }); 
          break; 
         case "RadioButton": 
          cell.Controls.Add(new Literal { Text = (control as RadioButton).Text }); 
          break; 
        } 
        cell.Controls.Remove(control); 
       } 
      } 
     } 

     GridView1.RenderControl(hw); 

     //style to format numbers to string 
     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
     Response.Write(style); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

protected void ViewPP_Click(object sender, EventArgs e) 
{ 
    string strConnString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(strConnString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("SELECT * FROM Table")) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       cmd.Connection = con; 
       sda.SelectCommand = cmd; 

        using (DataTable dt = new DataTable()) 
        { 
         sda.Fill(dt); 
         GridView1.DataSource = dt; 
         GridView1.DataBind(); 
        } 
       } 
     } 
    } 
} 

Обновленный мой код с это последняя часть:

protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    GridView1.DataBind(); 
} 

Проблема заключается в том, когда я экспортировать файл в Excel. он создает пейджинг в файле excel и не работает так, как должен. Он показывает пейджинг на листе excel и что клики не работают.

+0

Вы пытаетесь Google даже немного, если честно? – abatishchev

+0

после googling я получил ответ для привязки .. но не так идеально, как @nunespascal ответил! –

ответ

1

Paging является очень простой задачей

Вот учебник, чтобы направлять вас: Paging and Sorting the GridView's Data

<asp:GridView ID="GridView1" Runat="server" 
    AutoGenerateColumns="False" 
    AllowPaging="True" > 

Основная проблема, однако, является то, что вы загружаете все данные в DataTable. Это загрузит все данные в памяти. Вместо этого вы должны использовать SqlDataSource. В этом уроке также показано, как использовать SqlDataSource.

Edit:

Набор SqlDataSource на кнопку мыши:

protected void Button_Click(object sender, EventArgs e) 
{ 
    GridView1.DataSource = SqlDataSource1; 
    GridView1.DataBind(); 
} 
+0

У меня есть пейджинговое решение, но для загрузки больших данных я не понимаю, что вы подразумеваете под использованием sqlDataSource. поскольку использование SqlDataSource будет отображать информацию о загрузке страницы. вместо пользователя нажмите на кнопку. –

+0

Он отображает данные, когда вы связываете SqlDataSoruce. Вы можете сделать это одним нажатием кнопки. – nunespascal

+0

hmm .. получил .. попробова. на данный момент, похоже, работает. проверьте мой новый код и мою новую ошибку. –

Смежные вопросы