2017-07-22 14 views
0

C#でWinFormsを使用して釣りトーナメントのリーダーボードを構築しようとしています。私の考えは、テキストボックスにデータテーブルにロードされるSQLデータベースのデータを入力することです。トーナメントにはいくつかのサブトーナメントが表示されます。C#Winformのデータテーブルからテキストボックスをリフレッシュするためのタイマーの使用

私のWinFormは7行のテキストボックスを持っているので、テーブルが空になるまで、データテーブルの最初の7行を40秒間表示し、次に7行を表示する必要があります。次に、次のトーナメントのためにデータテーブルを補充し、プロセスを繰り返すためにクエリを実行する。

フォームは、充填する前に正しい長さの時間が遅れるため、タイマーが機能しますが、次の7行でリフレッシュする方法には固執しています。

正しい方向に進むための助けがあれば幸いです。ここで

は、私が持っているコードは、これまでのところです:

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

     { 
+0

制限オフセットの練習を使用することを検討して、または表示した後に行を削除あなたはこれを行うKAN – invader7

答えて

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

を見てくださいそして、あなたが前に使用されるパラメータをhaventは場合:

sda.SelectCommand.Parameters.AddWithValue("@n", [pagenumber]); 
関連する問題