2014-02-21 2 views
1

Я пытаюсь реализовать разбиение на страницы в DataGridView в приложении Windows C#. В основном у меня есть простой DataGridView, который заполняется хранимой процедурой в базе данных и также получает общие записи из другой хранимой процедуры.Pagination не работает должным образом с DataGridView?

Я также добавил три кнопки в сетку, которые относятся к трем другим формам, и они отправляют TicketID (столбец 0 в сетке) вместе с ними в качестве параметра.

Теперь, когда сетка загружена, она отлично работает (все три кнопки успешно отправляют TicketID в параметрах), но всякий раз, когда я нажимаю на элемент управления страницей (сначала, предыдущий, следующий, последний), 3 кнопки, которые я добавил, работает должным образом. Я имею в виду, что вместо отправки TicketID (столбец 0) в качестве параметра они отправляют «ButtonName (.Text of DataGridView button)» столбца.

Я не могу понять, в чем проблема, я бы очень признателен, если кто-то может мне помочь.

Код страницы:

  public partial class Form1 : Form 
      { 
    private int totalRecords = 0; 
    private int mintTotalRecords = 0; 
    private int mintPageSize = 0; 
    private int mintPageCount = 0; 
    private int mintCurrentPage = 1; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void fillGrid() 
    { 
     try 
     { 
      this.mintPageSize = 10; 
      this.mintTotalRecords = getCount(); 
      this.mintPageCount = this.mintTotalRecords/this.mintPageSize; 
      if (this.mintTotalRecords % this.mintPageSize > 0) 
       this.mintPageCount++; 
      this.mintCurrentPage = 0; 
      loadPage(); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 
    private int getCount() 
    { 
     SqlConnection con = new SqlConnection(); 
     try 
     { 

      con.ConnectionString = "//connectionstring"; 
      SqlCommand com = new SqlCommand(); 
      com.Connection = con; 
      com.CommandText = "getTotalNo"; 
      com.CommandType = CommandType.StoredProcedure; 
      com.Parameters.Clear(); 
      con.Open(); 
      SqlDataReader dr = com.ExecuteReader(); 
      while (dr.Read()) 
      { 
       totalRecords = Convert.ToInt32(dr["total"].ToString()); 
      } 
     } 
     catch (Exception ex) 
     { 
      totalRecords = 0; 
     } 

     return totalRecords; 
    } 


    private void loadPage() 
    { 
     SqlConnection con = new SqlConnection(); 
     try 
     { 

      int intSkip = 0; 
      intSkip = (this.mintCurrentPage * this.mintPageSize); 
      con.ConnectionString = "//connectionstring"; 
      SqlCommand com = new SqlCommand(); 
      com.Connection = con; 
      com.CommandText = "showRecord"; 
      com.CommandType = CommandType.StoredProcedure; 
      com.Parameters.Clear(); 
      com.Parameters.AddWithValue("@pagesize", mintPageSize.ToString()); 
      com.Parameters.AddWithValue("@skip", intSkip.ToString()); 
      con.Open(); 
      SqlDataReader dr = com.ExecuteReader(); 
      DataTable dt = new DataTable(); 
      dt.Load(dr); 
      dgRecords.DataSource = dt; 
      label1.Text = (this.mintCurrentPage + 1).ToString() + "/" + this.mintPageCount.ToString(); 


     } 
     catch (Exception ex) 
     { 

     } 
    } 

    private void loadbtns() 
    { 
     DataGridViewButtonColumn cell = new DataGridViewButtonColumn(); 
     cell.HeaderText = "View Details"; 
     cell.Name = "View"; 
     cell.Visible = true; 
     cell.Width = 100; 
     cell.Text = "View Details"; 
     cell.UseColumnTextForButtonValue = true; 

     DataGridViewButtonColumn cell2 = new DataGridViewButtonColumn(); 
     cell2.HeaderText = "Add Details"; 
     cell2.Name = "Add"; 
     cell2.Visible = true; 
     cell2.Width = 120; 
     cell2.Text = "Add Technical Detail"; 
     cell2.UseColumnTextForButtonValue = true; 

     DataGridViewButtonColumn cell3 = new DataGridViewButtonColumn(); 
     cell3.HeaderText = "Close Ticket"; 
     cell3.Name = "Close"; 
     cell3.Visible = true; 
     cell3.Width = 100; 
     cell3.Text = "Close Ticket"; 
     cell3.UseColumnTextForButtonValue = true; 

     dgRecords.Columns.Add(cell); 
     dgRecords.Columns.Add(cell2); 
     dgRecords.Columns.Add(cell3); 
    } 



    private void lnkFirst_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      this.mintCurrentPage = this.mintPageCount - 1; 

      loadPage(); 
     } 
     catch 
     { 
     } 

    } 

    private void lnkNext_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      this.mintCurrentPage++; 

      if (this.mintCurrentPage > (this.mintPageCount - 1)) 
       this.mintCurrentPage = this.mintPageCount - 1; 

      loadPage(); 
     } 
     catch 
     { 
     } 

    } 

    private void lnkPrevious_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (this.mintCurrentPage == this.mintPageCount) 
       this.mintCurrentPage = this.mintPageCount - 1; 
      this.mintCurrentPage--; 
      if (this.mintCurrentPage < 1) 
       this.mintCurrentPage = 0; 

      loadPage(); 
     } 
     catch 
     { 
     } 
    } 

    private void lnkLast_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      this.mintCurrentPage = 0; 

      loadPage(); 
     } 
     catch 
     { 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     fillGrid(); 
     loadbtns(); 
    } 

    void childForm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     this.Visible = true; 
    } 

    private void dgRecords_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == dgRecords.Columns["Add"].Index) 
     { 
      Form5 frm2 = new Form5(dgRecords.Rows[dgRecords.CurrentRow.Index].Cells[0].Value.ToString()); 
      frm2.FormClosed += new FormClosedEventHandler(childForm_FormClosed); 
      frm2.Show(); 
      this.Hide(); 
     } 

     else if (e.ColumnIndex == dgRecords.Columns["Close"].Index) 
     { 
      Form6 frm = new Form6(dgRecords.Rows[dgRecords.CurrentRow.Index].Cells[0].Value.ToString()); 
      frm.FormClosed += new FormClosedEventHandler(childForm_FormClosed); 
      frm.Show(); 
      this.Hide(); 
     } 

     else if (e.ColumnIndex == dgRecords.Columns["View"].Index) 
     { 
      Form4 frm3 = new Form4(dgRecords.Rows[dgRecords.CurrentRow.Index].Cells[0].Value.ToString()); 
      frm3.FormClosed += new FormClosedEventHandler(childForm_FormClosed); 
      frm3.Show(); 
      this.Hide(); 
      } 

     } 
    } 
    } 

Сохраненная Процедура TotalRecords:

  ALTER PROCEDURE [dbo].[getTotalNo] 
      AS 
      BEGIN 

      select count(*) total from tblTicketDetail where status = 1 

      END 

Сохраненная Процедура ShowRecords:

ALTER PROCEDURE [dbo].[showRecord] 
    @pagesize int, 
    @skip int 

    AS 
    BEGIN 

    SELECT TOP (@pagesize) * FROM tblTicketDetail WHERE TicketID NOT IN (SELECT TOP (@Skip) TicketID FROM tblTicketDetail) 

    END 
+0

Пожалуйста, обратите внимание на теги, применяя их к вопросу. ['paging'] (http://stackoverflow.com/tags/paging/info) означает что-то * полностью * другое. –

+0

Кроме того, я не смог найти код sql – Alexander

ответ

1

я просто решить мою собственную проблему, вместо того, упоминание номера ячейки («Cell [0]») Я упомянул ячейку HeaderText (Cell ["TicketID"])

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