C#在Winform中使用计时器刷新数据表中的文本框

C#在Winform中使用计时器刷新数据表中的文本框,c#,winforms,timer,datatable,textbox,C#,Winforms,Timer,Datatable,Textbox,我正在尝试使用C#中的WinForms为钓鱼比赛构建排行榜。我的想法是用SQL数据库中的数据填充文本框,这些数据将加载到datatable中。锦标赛将显示多个子锦标赛 我的WinForm有七行文本框,因此我需要在40秒内显示datatable的前七行,然后显示下七行,以此类推,直到该表为空。然后,它将运行一个查询,为下一场比赛重新填充数据表,并重复该过程 计时器之所以有效,是因为表单在填充之前延迟了正确的时间长度,但我一直在研究如何让它刷新接下来的七行 如果您能帮助我们朝着正确的方向前进,我们将

我正在尝试使用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]);

考虑使用限制偏移练习,或在显示后删除行