GridViewを自動スクロールする方法

このQ&Aのポイント
  • GridViewで最新のデータを常に表示させる方法を探しています。現在、新しい情報を1行表示するたびにスクロールアップさせる方法がわかりません。
  • Aクライアントがデータをサーバーに送信し、サーバーが蓄積します。Bクライアントはサーバーに蓄積されたデータに変化があると、GridViewで常に表示しています。新しいデータは下の行に、古いデータは上の行に表示しています。
  • JavaScriptを使用しているため、GridViewを自動的にスクロールする方法がわかりません。最新のデータを常に最下行に表示させたいです。どのようにすれば実現できるでしょうか?
回答を見る
  • ベストアンサー

GridViewを自動的にスクロールするには

Aクライアントはデータをサーバーに送信し、サーバーは蓄積します。 Bクライアントはサーバーに蓄積されたデータに変化があれば, その都度GridViewで常時表示しています。 GridViewには新しいデータを下の行に、古いデータを上の行にという順序で表示しています。 GridViewにはスクローバーを付けています。 GridViewではいつも最新のデータを表示させたいので、いつも最下行を表示させるようにしたい。 つまり、新しい情報を1行表示させるたびに、1行スクロールアップさせたいのですが、スクロールの方法がわかりません。 言語はJavaScriptを使用しています。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qtea
  • ベストアンサー率77% (38/49)
回答No.3

JavaScriptを記述している(クライアント・コールバックの関数)の最後に、 var ctrl = document.getElementById("スクロールバーを出しているコントロールのID"); ctrl.scrollTop=ctrl.clientHeight; のように書けば…うまくいくような…気がします。(気のせいかも)

shitochin
質問者

お礼

ありがとうございました。 できました。 ほんと助かりました。 ほんとにありがとうございました。

shitochin
質問者

補足

回答ありがとうございます。 スクロールバーは下記の様に表示しています。 <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"); でよろしいのでしょうか? よろしくお願いします。

その他の回答 (3)

回答No.4

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

回答No.2

> 1回表示させるだけなら、回答の様にすれば良いと思います。 > ですが、DridViewを表示させた状態で、2秒に一度サーバーに蓄積データに変化があるかどうか問い合わせをしています。 > サーバーは変化があるとクライアントに蓄積している全データを送信します。 > クライアントはその全データをGridViewで表示しています。 > この時にGridViewを1行スクロールさせ最下行を表示したいのです。 なんどページをリロードしようとも降順で取得したデータを表示させるのですから常に最新のデータが一番上に表示されます。 スクロールすることで「最新データが入ってきたよ」をユーザーに教える事が目的ではなく、リロードしても最新データを見やすい場所に表示させることが目的ならコレで要件は満たしていると思いますが?

shitochin
質問者

補足

回答ありがとうございます。 説明がヘタで申し訳ありません。 勘違いされているカ所があります、新しいデータを最下行に古いデータを最上行とソートして表示しています。 クライアントがサーバーから全データ受信したときに、 GridViewに1行追加し、 GridView1.rows[X].cells[Y].InnerTextに保存しています。 そうするとスクロールバーは短くなっていき、画面はスクロールしませんので、最新のデータを表示されません。最新のデータを表示させるためは、スクロールバーを下に移動すると表示できますが・・・ よろしくお願いします。

回答No.1

JavaScript 云々はさておいて 私なら新しいデータが上、古いデータが下に来るよう、降順でデータを取得します。

shitochin
質問者

補足

回答ありがとうございます。 説明不足で申し訳ありません。 1回表示させるだけなら、回答の様にすれば良いと思います。 ですが、DridViewを表示させた状態で、2秒に一度サーバーに蓄積データに変化があるかどうか問い合わせをしています。 サーバーは変化があるとクライアントに蓄積している全データを送信します。 クライアントはその全データをGridViewで表示しています。 この時にGridViewを1行スクロールさせ最下行を表示したいのです。 よろしくお願いします。

関連するQ&A

  • ASP.NET GridView の二列表示

    ASP.NET GridView につきまして質問があります。 よろしくお願いいたします。 SQL Server にあるデータを使用して、GridView を作成しております。 普通にGridViewを作成すると すべて横一列で表示されてしまいます。 例えば項目列が沢山あると、画面を横スクロールしなくてはすべてが見えなくなってしまいます。 なるべく1画面ですべてを見渡せるようにしたいのですが、そのためには GridView での1データを2列表示にできればよいのではないかと思うのですが、 2列表示にできるのでしょうか? ご教授いただければ 大変助かります。 よろしくお願いいたします。

  • gridviewのスクロールバーを非表示にしたい

    以下のとおりgridviewを表示し、データが存在する時は右スクロールバーが使用できるようにしています。 データ件数が0件の時は"データなし"と表示するのですが、 この時、スクロールバーを非表示するにはどうすればよいのでしょうか? <div class ="conditionpart2"> <table class="condition"> <tr style="text-align:left;"> <td> <asp:UpdatePanel ID="UpdPlView" runat="server" UpdateMode="Conditional"> <ContentTemplate> <C1GridView:C1GridView ID="grdList" runat="server" AutoGenerateColumns="False" DataSourceID="sqldsList" VisualStylePath="~/Common/css/CmpOne" VisualStyle="Office2007Blue" UseEmbeddedVisualStyles ="False" AllowSorting="True" SelectionMode="None" EmptyDataText = "データなし" ClientOnColumnWidthChanged="c1GridView_widthChange" AllowColMoving="true" AllowColSizing="true" CellPadding="0" CellSpacing="0" DataKeyNames="CODE" Height="540px" Width="1203px" ScrollSettings-ScrollMode="ScrollBar" ScrollSettings-ScrollOrientation="Vertical" > <ScrollSettings ScrollMode="ScrollBar" /> <HeaderStyle HorizontalAlign="Center" CssClass="headerStyle" /> <EmptyDataTemplate> <asp:label CssClass="lblNoData" id="lblNoData" runat="server">データなし</asp:label> </EmptyDataTemplate> <EmptyDataRowStyle VerticalAlign="Middle" HorizontalAlign="Center" Height="500px" /> <RowStyle Height="24px" /> <Columns> <C1GridView:C1BoundField HeaderText="コード" DataField="CODE"> <ItemStyle Width="80px"></ItemStyle> </C1GridView:C1BoundField> <C1GridView:C1BoundField HeaderText="品名" DataField="NAME"> <ItemStyle Width="850px"></ItemStyle> </C1GridView:C1BoundField> </Columns> </C1GridView:C1GridView> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="ddlCode" EventName="SelectedIndexChanged" /> </Triggers> </asp:UpdatePanel> </td> </tr> </table> </div>

  • GridViewに行追加するには?

    ObjectDataSourceをGridViewにバインドしてGridViewを表示しています。GridViewは1画面に20行固定で表示したいのですが、表示するデータが20行に満たない場合でも空白行を追加して、20行表示にしたい。空白行を追加するにはどうすればよろしいでしょうか? GridView1.Controls[0].Controls.AddAt(INDEX,GridViewRow)で追加できそうなのですが、GridViewRowの作成方法がわかりません。 よろしくおねがいします。

  • ASP.NET 2.0 GridViewの更新ボタンについて

    いつもお世話になっています。 GridViewでItemTemplateでGridViewの中にボタンを作っています。 それで、編集ボタンを押して、データを書き換え更新ボタンを押すのですが、更新されません。 どこか間違っていじったのかもしれません。ここじゃないかと思うところありましたら、回答お願いします。 (更新ボタンのCommandNameはUpdateになっています。) <<環境>> Client:Vista Server:Server2003 VisualStudio2005 SP1

  • gridViewの行選択解除

    gridViewの行選択解除 windowsのvb.netでgridviewを使用しております。 ページを読み込んだ際にgridViewにデータを表示するのですが gridViewの先頭行が選択状態のまま表示されてしまいます。 未選択状態にすることは可能なのでしょうか? お分かりになる方がいらしゃいましたらよろしくお願い致します。

  • ASP.NET GridView につきまして

    ASP.NET GridView につきまして質問があります。 よろしくお願いいたします。 SQL Server にあるデータを使用して、GridView を作成しております。 あるBit型フィールドがあるのですが、NULLの場合は 無、1の場合には 有 と GridView内に表示させたいのですが、GridViewの項目はバインドされているフィールドしか表示させることができないのでしょうか? 非連結の項目を追加して どこかのプロパティに =IIf([CheckChoku]=True,"有","無") を記述すれば、表示できるような方法を探しています。 すみません ASP.Net は始めたばかりなので、VB や Access のような操作が応用できればなと思っております。もしくは SQL のデータソースを作成するときに上記を埋め込んでソースにしないと実現できないものでしょうか? ご教授いただければ 大変助かります。 よろしくお願いいたします。

  • VBでスプレッドをしようする際にスクロールバーがおかしい

    スプレッドを使って、DBからデータを表示しているのですが、 上部の数行を隠し行(RowHeight=0)にすると、 スクロールバーが最下行に移動後、最上行に移動しようとするが スクロールバーが最上行まで移動しない。 (カーソルが上まで行かない、空白がある) どうしてでしょうか? また、どうすれば解決できるでしょうか? 回答願います。m(__)m

  • GridViewの行をダブルクリック

    GridViewで行をダブルクリックした時、その行の詳細画面を別ウインドウで表示したいのですが どのようにすればよいですか? web開発初心者なのでjavascriptもわからず苦戦しています。 できればコーディング例があればうれしいです。 ご教授お願いします。

  • Excelである行をスクロールしても見えるようにしたい

    Excelで2000行くらいの大きなデータベースがあります。このシートの10行目にデータベースの見出しがあり、以下の条件の下、スクロールしてもいつもここが表示されるようにしたいですがどのようにすれば可能か教えて下さい。 (条件) ・1行目~9行目にはこのデータベースの使い方が書いてある。 ・10行目にデータベースの見出しが有る。 ・スクロールした時に1~9行目は見えなくなっても構わないが、10行目だけはいつも表示させておきたい。 (知りたいこと) 「ウインドウ枠の固定」機能を使うと上記の条件の場合、1行目~10行目まで固定されてしまう。固定したいのは10行目だけ。(1~9行目は単なる説明なので常時表示する必要が無い。) 特定の行だけの固定方法はあるのでしょうか?VBAを使えば可能でしょうか?

  • GridViewの行選択イベントを発生させるには?

    visual studio 2010でwebアプリケーションを作成しています。 GridViewの行をクリックしたことをjavascriptで認識したいので行の一番左のセルにチェックボックスを張り付けることにより実現できたのですが、チェックボックスとかボタンとかを張り付けないで行のどのセルをクリックしてもイベントを発生させるにはどのようにすればよろしいでしょうか? コントロールを張り付けたくないのは、1行に表示できる文字の領域がせまくなってしまうためです。