C#在Winform中使用计时器刷新数据表中的文本框
我正在尝试使用C#中的WinForms为钓鱼比赛构建排行榜。我的想法是用SQL数据库中的数据填充文本框,这些数据将加载到datatable中。锦标赛将显示多个子锦标赛 我的WinForm有七行文本框,因此我需要在40秒内显示datatable的前七行,然后显示下七行,以此类推,直到该表为空。然后,它将运行一个查询,为下一场比赛重新填充数据表,并重复该过程 计时器之所以有效,是因为表单在填充之前延迟了正确的时间长度,但我一直在研究如何让它刷新接下来的七行 如果您能帮助我们朝着正确的方向前进,我们将不胜感激 以下是我目前掌握的代码:C#在Winform中使用计时器刷新数据表中的文本框,c#,winforms,timer,datatable,textbox,C#,Winforms,Timer,Datatable,Textbox,我正在尝试使用C#中的WinForms为钓鱼比赛构建排行榜。我的想法是用SQL数据库中的数据填充文本框,这些数据将加载到datatable中。锦标赛将显示多个子锦标赛 我的WinForm有七行文本框,因此我需要在40秒内显示datatable的前七行,然后显示下七行,以此类推,直到该表为空。然后,它将运行一个查询,为下一场比赛重新填充数据表,并重复该过程 计时器之所以有效,是因为表单在填充之前延迟了正确的时间长度,但我一直在研究如何让它刷新接下来的七行 如果您能帮助我们朝着正确的方向前进,我们将
private void Timer1_Tick(object sender, EventArgs e)
{
TitleTxtBx.Text = "Redfish General Weight";
SqlConnection KF = new SqlConnection("user id=--------;" +
"password=--------;server=--------;" +
"Trusted_Connection=no;" +
"database=-------;" +
"connection timeout=120");
SqlDataAdapter sda = new SqlDataAdapter(@"SELECT ROW_NUMBER() OVER(ORDER BY RFFishWeight DESC) AS POS, Number, RFFName, RFLAName, RFFishWeight
FROM RedFish
WHERE Kayak LIKE 'no'
AND RFFishWeight > 0
ORDER BY RFFishWeight DESC,
TimeStamp DESC", KF);
DataTable LBdt = new DataTable();
sda.Fill(LBdt);
RnkTxtBx1.Text = LBdt.Rows[0][0].ToString();
BTNbrTxtBx1.Text = LBdt.Rows[0][1].ToString();
FNameTxtBx1.Text = LBdt.Rows[0][2].ToString();
LNameTxtBx1.Text = LBdt.Rows[0][3].ToString();
WhtTxtBx1.Text = LBdt.Rows[0][4].ToString();
RnkTxtBx2.Text = LBdt.Rows[1][0].ToString();
BTNbrTxtBx2.Text = LBdt.Rows[1][1].ToString();
FNameTxtBx2.Text = LBdt.Rows[1][2].ToString();
LNameTxtBx2.Text = LBdt.Rows[1][3].ToString();
WhtTxtBx2.Text = LBdt.Rows[1][4].ToString();
RnkTxtBx3.Text = LBdt.Rows[2][0].ToString();
BTNbrTxtBx3.Text = LBdt.Rows[2][1].ToString();
FNameTxtBx3.Text = LBdt.Rows[2][2].ToString();
LNameTxtBx3.Text = LBdt.Rows[2][3].ToString();
WhtTxtBx3.Text = LBdt.Rows[2][4].ToString();
RnkTxtBx4.Text = LBdt.Rows[3][0].ToString();
BTNbrTxtBx4.Text = LBdt.Rows[3][1].ToString();
FNameTxtBx4.Text = LBdt.Rows[3][2].ToString();
LNameTxtBx4.Text = LBdt.Rows[3][3].ToString();
WhtTxtBx4.Text = LBdt.Rows[3][4].ToString();
RnkTxtBx5.Text = LBdt.Rows[4][0].ToString();
BTNbrTxtBx5.Text = LBdt.Rows[4][1].ToString();
FNameTxtBx5.Text = LBdt.Rows[4][2].ToString();
LNameTxtBx5.Text = LBdt.Rows[4][3].ToString();
WhtTxtBx5.Text = LBdt.Rows[4][4].ToString();
RnkTxtBx6.Text = LBdt.Rows[5][0].ToString();
BTNbrTxtBx6.Text = LBdt.Rows[5][1].ToString();
FNameTxtBx6.Text = LBdt.Rows[5][2].ToString();
LNameTxtBx6.Text = LBdt.Rows[5][3].ToString();
WhtTxtBx6.Text = LBdt.Rows[5][4].ToString();
RnkTxtBx7.Text = LBdt.Rows[6][0].ToString();
BTNbrTxtBx7.Text = LBdt.Rows[6][1].ToString();
FNameTxtBx7.Text = LBdt.Rows[6][2].ToString();
LNameTxtBx7.Text = LBdt.Rows[6][3].ToString();
WhtTxtBx7.Text = LBdt.Rows[6][4].ToString();
{
因此,您需要跳过@n乘以7行。你可以这样做:
;with numberedtable as (
SELECT ROW_NUMBER() OVER(ORDER BY RFFishWeight DESC) AS POS, Number, RFFName, RFLAName, RFFishWeight
FROM RedFish
WHERE Kayak LIKE 'no'
AND RFFishWeight > 0
ORDER BY RFFishWeight DESC,
TimeStamp DESC
)
select top 7 POS, Number, RFFName, RFLAName, RFFishWeight
from numberedtable
where pos > 7 * @n
order by pos
看看
如果您以前没有使用过参数:
sda.SelectCommand.Parameters.AddWithValue("@n", [pagenumber]);
考虑使用限制偏移练习,或在显示后删除行