想法是這樣的:使用bindingNavigator+存儲過程實現DataGridView的分頁功能,其中包含簡單的查詢。
存儲過程如下:
--創建分頁查詢存儲過程(含輸出參數,輸入參數(含搜索功能))
use HotelDB
if exists(select * from sys.procedures where name='pro_getGuestRecord')
drop procedure pro_getGuestRecord
gocreate procedure pro_getGuestRecord
@pageSize int,
@pageIndex int,
@beginTime datetime,
@endTime datetime,
@ResideID int,
@RecordCount int output
as
begin
declare @sqlStr0 nvarchar(max);
set @sqlStr0 = 'SELECT @RecordCount=count(a.GuestID)
FROM GuestRecord AS a INNER JOIN
Room AS b ON a.RoomID = b.RoomID INNER JOIN
ResideState AS e ON a.ResideID = e.ResideID INNER JOIN
RoomType AS d ON b.RoomTypeID = d.TypeID INNER JOIN
RoomState AS c ON b.RoomStateID = c.RoomStateID'
set @sqlStr0 +=' WHERE (a.ResideDate BETWEEN ''' + CAST(@beginTime as nvarchar)+ ''' AND '''+ CAST(@endTime as nvarchar)+ ''')';
if(@ResideID <> 0)
begin
set @sqlStr0 += ' AND (e.ResideID = '+CAST(@ResideID AS nvarchar)+')';
end
declare @sqlStr1 varchar(max);
set @sqlStr1 = 'select * from(
select row_number() over(order by a.GuestID asc) as num,
a.GuestID, a.GuestName, a.ResideDate, a.Reposit, a.LeaveDate, a.TotalMoney, b.RoomID, d.TypeName,
c.RoomStateName, b.RoomStateID
FROM GuestRecord AS a INNER JOIN Room AS b ON a.RoomID = b.RoomID
INNER JOIN ResideState AS e ON a.ResideID = e.ResideID
INNER JOIN RoomType AS d ON b.RoomTypeID = d.TypeID
INNER JOIN RoomState AS c ON b.RoomStateID = c.RoomStateID'
set @sqlStr1 +=' WHERE (a.ResideDate BETWEEN ''' + CAST(@beginTime as varchar)+ ''' AND '''+ CAST(@endTime as nvarchar)+ ''')';
if(@ResideID <> 0)
begin
set @sqlStr1 += ' AND (e.ResideID = '+CAST(@ResideID AS nvarchar)+')';
end
set @sqlStr1 +=') as GuestRecordInfo';
set @sqlStr1 +=' where num between '+CAST(@pageSize as nvarchar)+'*('+CAST(@pageIndex as nvarchar)+'-1)+1 and '+CAST(@pageSize as nvarchar)+'*'+CAST(@pageIndex as nvarchar)+'';
execute sp_executesql @sqlStr0,N'@RecordCount int output',@RecordCount output
--execute sp_executesql @sqlStr1
exec(@sqlStr1);
end
winform界面設計如下:
主要的CS代碼如下:
//每頁顯示記錄數
private int pageSize = 2;
//當前頁碼
private int pageIndex = 1;
//總頁數
private int pageCount = 0;
//總記錄數
private int RecordCount = 0;//默認顯示當天的全部入住狀態的數據。
//開始時間
private DateTime beginTime = DateTime.Now.Date;
//截止時間
private DateTime endTime = DateTime.Now.Date.AddDays(1);
//入住狀態ID
private int ResideID = 0;private void Form_Load(object sender, EventArgs e)
{
Bind();//綁定DataGridView數據。
setDGVData();
//設置分頁顯示數據
setPageDate();
//設置下拉選擇可選內容
setComboBoxDataSource();
}//綁定查詢處ComboBox數據源
private void Bind()
{
this.cbbResideState.DataSource = ResideStateManager.GetResideStateList();
this.cbbResideState.ValueMember = "ResideID";
this.cbbResideState.DisplayMember = "ResideName";
}//查詢
private void btnQuery_Click(object sender, EventArgs e)
{
pageIndex = 1;
beginTime = Convert.ToDateTime(dtpStartTime.Text.Trim());
endTime = Convert.ToDateTime(dtpEndTime.Text.Trim()).AddDays(1);
ResideID = Convert.ToInt32(cbbResideState.SelectedValue);//綁定DataGridView數據。
setDGVData();
//設置分頁顯示數據
setPageDate();
//設置下拉選擇可選內容
setComboBoxDataSource();
}//綁定DataGridView數據。
private void setDGVData()
{
DataTable GuestInfo = GuestRecordManager.GetGuestInfoByPage(beginTime, endTime, ResideID, pageSize, pageIndex, ref RecordCount);
dgvRecordInfo.DataSource = GuestInfo;
//設置“入住時間”、“離開時間”的顯示格式
dgvRecordInfo.Columns[2].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
dgvRecordInfo.Columns[4].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
}//設置分頁顯示數據
private void setPageDate()
{
//計算總頁數
if (RecordCount % pageSize == 0)
{
pageCount = RecordCount / pageSize;
}
else
{
pageCount = RecordCount / pageSize + 1;
}//設置顯示的當前頁碼
this.bindingNavigatorPositionItem.Text = pageIndex.ToString();
//設置顯示的總頁數
this.bindingNavigatorCountItem.Text = "/ {" + pageCount.ToString() + "}";
//設置顯示的總記錄數
this.toolStripLabel_totalRecord.Text = "共" + RecordCount.ToString() + "條記錄";//設置“首頁”、“前一頁”、“下一頁”、“尾頁”按鈕的可用性
if (RecordCount == 0)
{
this.bindingNavigatorMoveFirstItem.Enabled = false;
this.bindingNavigatorMovePreviousItem.Enabled = false;
this.bindingNavigatorMoveNextItem.Enabled = false;
this.bindingNavigatorMoveLastItem.Enabled = false;
}
else
{
setPageButtonEnable();
}
}//設置“首頁”、“前一頁”、“下一頁”、“尾頁”按鈕的可用性
private void setPageButtonEnable()
{
if (pageIndex <= 1 && pageIndex == pageCount)//只有1頁數據時
{
this.bindingNavigatorMoveFirstItem.Enabled = false;
this.bindingNavigatorMovePreviousItem.Enabled = false;
this.bindingNavigatorMoveNextItem.Enabled = false;
this.bindingNavigatorMoveLastItem.Enabled = false;
}
else if (pageIndex <= 1)
{
this.bindingNavigatorMoveFirstItem.Enabled = false;
this.bindingNavigatorMovePreviousItem.Enabled = false;
this.bindingNavigatorMoveNextItem.Enabled = true;
this.bindingNavigatorMoveLastItem.Enabled = true;
}
else if (pageIndex >= pageCount)
{
this.bindingNavigatorMoveFirstItem.Enabled = true;
this.bindingNavigatorMovePreviousItem.Enabled = true;
this.bindingNavigatorMoveNextItem.Enabled = false;
this.bindingNavigatorMoveLastItem.Enabled = false;
}
else
{
this.bindingNavigatorMoveFirstItem.Enabled = true;
this.bindingNavigatorMovePreviousItem.Enabled = true;
this.bindingNavigatorMoveNextItem.Enabled = true;
this.bindingNavigatorMoveLastItem.Enabled = true;
}
}//設置toolStripComboBox1下拉選擇可選內容
private void setComboBoxDataSource()
{
List<ClassIntString> comboBoxDataList = new List<ClassIntString>();
ClassIntString data;
for (int i = 1; i <= pageCount; i++)
{
data = new ClassIntString();
data.id = i;
data.name = "第" + i + "頁";
comboBoxDataList.Add(data);
}
this.toolStripComboBox1.ComboBox.DataSource = comboBoxDataList;
this.toolStripComboBox1.ComboBox.ValueMember = "id";
this.toolStripComboBox1.ComboBox.DisplayMember = "name";
this.toolStripComboBox1.ComboBox.SelectedValue = 1;
}//自定義類ClassIntString:
//public class ClassIntString
//{
// public int id { get; set; }
// public string name { get; set; }
//}//首頁
private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e)
{
this.toolStripComboBox1.SelectedIndex = 0;
}
//上一頁
private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e)
{
this.toolStripComboBox1.SelectedIndex = pageIndex - 2;
}
//下一頁
private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
{
this.toolStripComboBox1.SelectedIndex = pageIndex;
}
//尾頁
private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
{
this.toolStripComboBox1.SelectedIndex = pageCount - 1;
}
//下拉切換到指定分頁
private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
pageIndex = this.toolStripComboBox1.SelectedIndex + 1;
//綁定DataGridView數據。
setDGVData();
//設置分頁顯示數據
setPageDate();
this.toolStripComboBox1.ComboBox.SelectedValue = pageIndex;
}
聲明:設計過程主要從以下文章得到啓發:https://blog.csdn.net/xiazhipeng1000/article/details/78378613