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

时间:2017-07-22 16:31:27

标签: c# winforms timer datatable textbox

我正在尝试使用C#中的WinForms构建钓鱼锦标赛的排行榜。我的想法是使用将加载到数据表中的SQL数据库中的数据填充文本框。锦标赛有几个分赛段将会展出。

我的WinForm有七行文本框,因此我需要显示数据表的前七行40秒,然后显示接下来的七行,依此类推,直到表为空。然后它将运行一个查询来重新填充下一个锦标赛的数据表并重复该过程。

计时器有效,因为表单会在填充之前延迟正确的时间长度,但我仍然坚持如何使用接下来的七行刷新它。

非常感谢任何帮助我们朝着正确方向前进的方法。

这是我到目前为止的代码:

     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();

        {

1 个答案:

答案 0 :(得分:0)

所以你需要跳过@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

查看common table expressions

如果您之前没有使用过参数:

sda.SelectCommand.Parameters.AddWithValue("@n", [pagenumber]);