Я пытаюсь реализовать разбиение на страницы в 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
Пожалуйста, обратите внимание на теги, применяя их к вопросу. ['paging'] (http://stackoverflow.com/tags/paging/info) означает что-то * полностью * другое. –
Кроме того, я не смог найти код sql – Alexander