
Aクライアントはデータをサーバーに送信し、サーバーは蓄積します。
Bクライアントはサーバーに蓄積されたデータに変化があれば,
その都度GridViewで常時表示しています。
GridViewには新しいデータを下の行に、古いデータを上の行にという順序で表示しています。
GridViewにはスクローバーを付けています。
GridViewではいつも最新のデータを表示させたいので、いつも最下行を表示させるようにしたい。
つまり、新しい情報を1行表示させるたびに、1行スクロールアップさせたいのですが、スクロールの方法がわかりません。
言語はJavaScriptを使用しています。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
JavaScriptを記述している(クライアント・コールバックの関数)の最後に、
var ctrl = document.getElementById("スクロールバーを出しているコントロールのID");
ctrl.scrollTop=ctrl.clientHeight;
のように書けば…うまくいくような…気がします。(気のせいかも)
この回答への補足
回答ありがとうございます。
スクロールバーは下記の様に表示しています。
<div id="freezingDiv" style="OVERFLOW: auto; WIDTH: 1250px; HEIGHT: 765px; left: 20px; position: absolute; top: 100px;"
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding ="7" DataSourceID="ObjectDataSource1" style="font-weight:,,,,,,,,">
<Columns>
<asp:BoundField DataField="name",,,,,,, />
<asp:BoundField DataField="time",,,,,,, />
<asp:BoundField DataField="parent",,,,, />
<asp:BoundField DataField="Expr1",,,,,, />
<asp:BoundField DataField="Expr2",,,,,, />
<asp:BoundField DataField="Expr3",,,,,, />
<asp:BoundField DataField="color_lst",, />
</Columns>
<HeaderStyle BackColor="DarkBlue" Font-Bold="True" ForeColor="White" CssClass="Freezing" />
</asp:GridView>
</div>
上記の様にasp:GridViewをDivで囲んでいます。
この様な場合
var ctrl = document.getElementById("スクロールバーを出しているコントロールのID");
は
var ctrl = document.getElementById("freezingDiv");
でよろしいのでしょうか?
よろしくお願いします。

No.4
- 回答日時:
> 勘違いされているカ所があります、新しいデータを最下行に古いデータを最上行とソートして表示しています。
> クライアントがサーバーから全データ受信したときに、
> GridViewに1行追加し、
> GridView1.rows[X].cells[Y].InnerTextに保存しています。
なぜに最下行に追加するのか、ってのが私の疑問であり、手段が目的になっちゃってるんじゃないかと思う場所。
そもそもの目的が「最下行を表示する」ならこれ以上アドバイスは無いのですが、「新しく追加されたデータを画面内に表示させる」が目的なのであれば、応えは「スクロールさせる」ではなくて「スクロールさせなくても済む場所に表示する」なんじゃないかなぁと。
既存の表に新しいデータだけを追加するんじゃなくて、全件取得しなおせばよいのではないでしょうか。
その際に降順に並び替えれば(下に行くほど古いデータになるように)常に最新データが一番上に表示される、と。
"常にスクロールバーが一番下にくっついてることが「ちゃんと動いてるよ」とユーザーへアピールしていることになる" という目的もあるのならしょうがないですけどね。。。

No.2
- 回答日時:
> 1回表示させるだけなら、回答の様にすれば良いと思います。
> ですが、DridViewを表示させた状態で、2秒に一度サーバーに蓄積データに変化があるかどうか問い合わせをしています。
> サーバーは変化があるとクライアントに蓄積している全データを送信します。
> クライアントはその全データをGridViewで表示しています。
> この時にGridViewを1行スクロールさせ最下行を表示したいのです。
なんどページをリロードしようとも降順で取得したデータを表示させるのですから常に最新のデータが一番上に表示されます。
スクロールすることで「最新データが入ってきたよ」をユーザーに教える事が目的ではなく、リロードしても最新データを見やすい場所に表示させることが目的ならコレで要件は満たしていると思いますが?
この回答への補足
回答ありがとうございます。
説明がヘタで申し訳ありません。
勘違いされているカ所があります、新しいデータを最下行に古いデータを最上行とソートして表示しています。
クライアントがサーバーから全データ受信したときに、
GridViewに1行追加し、
GridView1.rows[X].cells[Y].InnerTextに保存しています。
そうするとスクロールバーは短くなっていき、画面はスクロールしませんので、最新のデータを表示されません。最新のデータを表示させるためは、スクロールバーを下に移動すると表示できますが・・・
よろしくお願いします。

No.1
- 回答日時:
JavaScript 云々はさておいて
私なら新しいデータが上、古いデータが下に来るよう、降順でデータを取得します。
この回答への補足
回答ありがとうございます。
説明不足で申し訳ありません。
1回表示させるだけなら、回答の様にすれば良いと思います。
ですが、DridViewを表示させた状態で、2秒に一度サーバーに蓄積データに変化があるかどうか問い合わせをしています。
サーバーは変化があるとクライアントに蓄積している全データを送信します。
クライアントはその全データをGridViewで表示しています。
この時にGridViewを1行スクロールさせ最下行を表示したいのです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
JSPとサーブレットを使用した勤...
-
.NET SqlDataReader のレコー...
-
DataGrdViewに関連付けたデータ...
-
ACCESSのVBAで[Split]について
-
VBSやVBAでXMLファイルを読み込...
-
ListViewで条件によって表示を...
-
MSFlexGridのデータ表示位置の設定
-
VB.NETで DataRow()を利用して...
-
特定のセルが空白だったら、そ...
-
エクセルで、絶対値の平均を算...
-
Excelで指定した日付から過去の...
-
連続する複数のセル値がすべて0...
-
VB.NETでコンボボックスの1行目...
-
セルの結果でマクロ実行
-
ユーザーフォームのテキストボ...
-
エクセルマクロでアニメを作る...
-
特定の列の値を、ひらがな・漢...
-
値を返さないコード パス
-
”戻り値”が変化したときに、マ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGrdViewに関連付けたデータ...
-
【Excel VBA】先頭の「0」飛び...
-
Listviewのデータを上から順番...
-
VB.net CrystalReportでプロジ...
-
.NET SqlDataReader のレコー...
-
GridViewにバインドせずにデー...
-
DataGridViewで表示に制限をつ...
-
GASでスプレッドシートの一番上...
-
C# データ配列から画像を作成す...
-
VBA ピボットテーブル自動更新
-
MSFlexGridのデータ表示位置の設定
-
JSPとサーブレットを使用した勤...
-
VBAでページ番号、ページ最終行...
-
【ASP.NET MVC】一覧編集画面
-
スプレッドシート 一括でQRコー...
-
ListViewで条件によって表示を...
-
C# ニコニコ動画API getthumbinfo
-
VBAで表に1つでも入ってたら取...
-
ACCESSのVBAで[Split]について
-
Q横並びデータを縦並びに変更
おすすめ情報