2016-09-04 9 views
0

が発生するのはです。マウスを使用してスクロールバーをDataGridviewの下部に移動すると問題が発生します。私は、このボタンをクリックしたときにそう、問題を発生しません。DataGridviewのスクロールバーの末尾にあるC#行をロード

enter image description here

私の目標は、初めに200行と、ユーザーがDataGridViewのスクロールバーロードの終わりに到達したより多くの200行をロードすることですように...何が起こる

private void Home_load(object sender, EventArgs e) 
{ 
    LoadRows(); 
} 

// Detects if the scrollbar is at bottom 
private void dataGridViewUsers_Scroll(object sender, ScrollEventArgs e) 
{ 
    if (hasMoreRows == false) 
     return; 

    // The rows height is always 22 
    int totalHeight = this.dataGridViewUsers.Rows.Count * 22; 

    if ((totalHeight - this.dataGridViewUsers.Height) < this.dataGridViewUsers.VerticalScrollingOffset) 
     LoadRows(); 
} 

private void LoadRows() 
{ 
    DataSet DSet = controllers.Users.LazyLoad(offset); 

    if (DSet.Tables[0].Rows.Count <= 0) 
    { 
     hasMoreRows = false; 
     return; 
    } 

    for (int i = 0; i < DSet.Tables[0].Rows.Count; i++) 
    { 
     this.dataGridViewUsers.Rows.Add 
     (
      DSet.Tables[0].Rows[i]["id"].ToString(), 
      DSet.Tables[0].Rows[i]["name"].ToString(), 
      DSet.Tables[0].Rows[i]["mobile"].ToString(), 
      DSet.Tables[0].Rows[i]["signup_date"].ToString() 
     ); 
    } 

    offset += 200; 
    this.dataGridViewUsers.Refresh(); 
} 

は通常、人々はスクロールバーをつかむと、下にそれを引っ張ることです。 enter image description here

データグラムビューでこれを行うと、予想よりも多くの行が追加されますが、異常な動作が発生します。

私は大体2000〜行を持っている、と私は一度下にスクロールバーを引くたび、それは総行に到達するまで、私のスクロールバーがアップ&下、上&下、上&ダウン、ナットを行きます。スクロールバーに人生そのものがあるようなものですか、ループしています。

あなたは私のコードでこのような振る舞いを再現することができますか?まあ

enter image description here enter image description here enter image description here

+1

AFIK、これは通常[仮想モード](https://msdn.microsoft.com/en-us/library/15a31akc)で行われます – Slai

答えて

0

私が正しくあなたを理解している場合、あなたは(最初のプログラムの実行時に)初めて欲しいだけ多くのことがないだけで200行ないロード?!それはあなたがそれに慣れている場合は、LINQ :)を使用する必要がありますあなたはこれのように書くことができます:(私はPSEUDOCODEを表示する)いくつかのデータオブジェクト ".Select(p => p).Take(200)// uは同様のLINQ要求を書きます場合はuがデータベースから最初の200個のデータ行を取得します。

ここ

よりサンプルuは残念ながら私はuがC#のLINQライブラリを知ってどれだけ精通していないよ、それは

var something = someobject. 
        .Select(a => a.name) 
        .Take(200); 

PSを見ることができますしかし、とにかくあなたはLINQについてより具体的な情報を得るためにgoogleを使うことができます。

これはほんの少しの助けになると思います。コーディングメイトの幸運

+0

質問は、より多くのレコードを読み込むよりもスクロールバーの動作に関係していると思います。 – TaW

+0

データの読み込み中に問題が発生しています。スクロールバーをプルアップしてからデータを呼び出すときに、データが正しく呼び出されないのではないかと思います。 LINQ ..........彼は旧式のデータアクセスレイヤー(DAL)を使用していると思います。もし彼がそうしたいと思うなら、それはもっと具体的にするべきですローディングプロセス。私は彼がより便利で安全であるという理由でLINQを使うべきだと思います。また、WPFを使用しているときにWinFormを使用している理由についてWinFormを気にしています –

関連する問題