2012-02-01 34 views
1

セットアップ: 現在、SqlDataSourceを使用して、更新パネル内にGridViewコントロールを含むページがあります。 GridViewをX秒ごとに更新するためのタイマー設定があります。通常、GridViewが更新するたびに、グリッドビューにデータの新しい行が4〜5回更新され、最後の4〜5回は削除されます。私は一度に15の結果しか表示しておらず、すべてのアップデートで新しい結果が出ます。ASP.NET GridViewコントロールで行選択を維持する

問題: GridViewが更新されている間に、ユーザーが行を選択できるようにしました。 SelectedIndexプロパティを設定することでこれを処理しています。ただし、行を選択してグリッドを更新すると、選択した行が約4-5行だけプッシュダウンされ、以前選択された索引のデータが選択されます。クリックした場所ではなく、クリックした場所が選択されます。

可能な場合は、SqlDataSource/Gridviewからグリッドビューにいくつの新しい行が追加されたかを判断する方法が必要です。または、SelectedIndexだけでなく、行内のデータによって選択されたデータを維持する方法。

ご協力いただきありがとうございます。

解決済み: 私はグリッドに新しい非表示の列を追加し、DBから選択した一意のIDを追跡しています。データバインディングの前に配列を設定し、それを新しい配列と比較することによって、データバインディングの後に簡単なIntersectを使用して、同じ行数を判断することができました。それから、このポストバックがどれだけ新しいかを合計から判断するためにそれを使用しました。

答えて

1

ジャストアイデア:

私はあなたがSession対象に選択された行IDs値を格納し、その後、グリッドを更新した後、あなたがこれを取得することができます目に見えない列(より具体的にID列)を使用することができると思います値が存在している場合は、その行を再度選択します。

+0

うん。わかります。はい、それはうまくいくでしょうが、それは私のシナリオでは、それは多くの処理になる可能性があります。また、データバインドされた行の数が新しいかどうかを判断する方法があるのか​​どうか疑問に思っていましたが、これは大いに役立ちます。 – user1048281

+0

グリッドには何行目がありますか?私はこれが多くの処理を必要とするとは思わない...彼らは数字だけであり、検索は本当に速く実行されるだろう。 –

+1

私はグリッドに新しい目に見えない列を追加して、DBから選択した一意のIDを追跡しています。データバインディングの前に配列を設定し、それを新しい配列と比較することによって、データバインディングの後に簡単なIntersectを使用して、同じ行数を判断することができました。それから、このポストバックがどれだけ新しいかを合計から判断するためにそれを使用しました。 – user1048281

0

カスタムGridView OnRowUpdatingイベントがある場合。

public void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    Session["CurrIndex"] = GridView.SelectedIndex;//index before insertion 
    Session["RowCount"] = GridView.Rows.Count;//row count before insertion 
    //Add new Rows 
    GridView.SelectedIndex = (Int32)(Session["CurrIndex"]) + (GridView.Rows.Count - (Int32)(Session["RowCount"]);//update selected index 
    Session["CurrIndex"] = GridView.SelectedIndex;//restore the index into session 
} 
+0

提案していただきありがとうございます。私は今何か似たようなことをやっていますが、行がデータバインド/追加されていないときにユーザーが行を更新しているときにこのイベントが発生することに注意してください。 – user1048281

関連する問題