none
GridView の一部を更新したい。 RRS feed

  • 質問

  • いつもお世話になっております。

    現在ASP.NET(VB) .net2.0
    にて開発をしております。

    GridViewにDropDownList列を複数配置しており
    DropDownList変更時にポストバックし、その他のDropDownListの内容を変更しております。

    その際、GridView全体が更新するので困っています。
    行数が少ない場合はそれでかまわないのですが、行数が多いと更新にかなり時間がかかってしまうのです。

    出来れば、変更列(変更箇所)のみ更新したいと思っております。

    JavaScriptで書けばいいと思うのですが、
    出来れば、ajax等を利用して対応したいと思い投稿させていただきました。

    ご教授のほどをお願いします。







    2010年3月18日 4:48

回答

  • > 現行 DropDownList が変更されると、 → ポストバック → Gridview 
    > のほかの列の DropList の中身を変更しております。

    そうであれば、GridView 全体を UpdatePanel に含めないとうまくいかないと
    思います。(GridView の一行だけ UpdatePanel で更新する方法はないと思い
    ます。)

    現在のソースは、GridView 全体を UpdatePanel で囲うようにしているようで
    すが、その方法ではうまくいっているのですよね?

    2010年3月18日 13:24

すべての返信

  • > JavaScriptで書けばいいと思うのですが、
    > 出来れば、ajax等を利用して対応したいと思い投稿させていただきました。

    ajaxを利用するというのはJavaScriptで書く、ということになりますが。。。
    GirdViewの内部の状況を簡単に変更してくれるようなツール(?)はないと思います。

    > 行数が少ない場合はそれでかまわないのですが、行数が多いと更新にかなり時間がかかってしまうのです。

    むしろ、「更新にかなり時間がかかる」という状態を解消する方法がないか調べてみたほうがいいかもしれません。

    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2010年3月18日 7:23

  • > 出来れば、変更列(変更箇所)のみ更新したいと思っております。

    更新というのはページのレンダリングのことでしょうか。
    UpdatePanel を使うとある程度改善できるかもしれません。
    ただし、データの転送量は変わらないので根本的な解決にはならないかもです。

    2010年3月18日 8:44
  • 小野@どっとねっとふぁん様
    返信ありがとうございます。

    表現がおかしくてすいません。
    あまり詳しくないもので。。。

    ajaxでどうにかしたいというのは
    UpdatePanel等を利用してどうにかならないかな??と思ったのです。

    自分のいうJavascriptというのは、 DropDownListの <SELECT></SELECT>
    を入れなおすということでした。。。
    表現がおかしくて申し訳ないです。


    更新という表現もおかしかったです。 更新ではなく、表示のちらつきだと思っていただければありがたいです。。。すいません。。。。
    現行 DropDownList が変更されると、 → ポストバック → Gridview のほかの列の DropList の中身を変更しております。
    そうすると、サーバー側で、処理し、Gridview 全体が再表示されてしまい。画面がちらついてしまうのです。






    2010年3月18日 10:03
  • もりお様返信ありがとうございます。

    はい。更新というのは ページのレンダリングのことです。

    現行 以下のようなソースでありまして、
    一度、列ごとをUpdatePanelで囲ってみたのですが、「
    無効なポストバックまたはコールバック・・・
    」という アプリケーションエラーが出てしまい、
    うまくいかなかったのです。


     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
    <ContentTemplate>
    <asp:GridView id="gvwList" runat="server" Width="950px" CssClass="tbl_1" AutoGenerateColumns="False" ShowHeader="False" BorderWidth="2px">
             <Columns>
                    <asp:TemplateField>
                     <ItemTemplate>
                                  <asp:DropDownList ID="cmb_shisetu"  runat=server Width="70px" AutoPostBack=true OnSelectedIndexChanged="cmb_shisetu_SelectedIndexChanged"></asp:DropDownList>
                             </ItemTemplate>
                             <ItemStyle HorizontalAlign="Center" BorderWidth="2px" Width="75px"></ItemStyle>
                     </asp:TemplateField>
                    <asp:TemplateField>
                     <ItemTemplate>
                                  <asp:DropDownList ID="cmb_kbn"  runat=server Width="70px" AutoPostBack=true OnSelectedIndexChanged="cmb_kbn_SelectedIndexChanged"></asp:DropDownList>
                             </ItemTemplate>
                             <ItemStyle HorizontalAlign="Center" BorderWidth="2px" Width="75px"></ItemStyle>
                     </asp:TemplateField>
    **************この下に いくつか、 リスト、テキスト等があります。 **********************


    </asp:GridView>
    </ContentTemplate>
    </asp:UpdatePanel>


    なにかいい解決策とかはあれば、ご教授いただけるとありがたいです。。。
    どうぞよろしくお願いします。


    2010年3月18日 10:14
  • こちらの記事が解決の手助けになるかもしれません。

    例外メッセージが途中までなので、エラー内容は推測ですが・・・。
    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年3月18日 13:01
  • > 現行 DropDownList が変更されると、 → ポストバック → Gridview 
    > のほかの列の DropList の中身を変更しております。

    そうであれば、GridView 全体を UpdatePanel に含めないとうまくいかないと
    思います。(GridView の一行だけ UpdatePanel で更新する方法はないと思い
    ます。)

    現在のソースは、GridView 全体を UpdatePanel で囲うようにしているようで
    すが、その方法ではうまくいっているのですよね?

    2010年3月18日 13:24
  • なかむらさん返信ありがとうございます。

    一度 HPを見てエラーがなくなるかしていみたいと思います。

    エラー内容はおなじだと思います。。。

    2010年3月19日 1:48
  • SurferOnWwwさん返信ありがとうございます。

    やっぱり無理ですか~。。。。。。

    ありがとうございます。

    もうすこし何か考えてみて、だめならあきらめようかと思います。。。。

     

     

    現在のソースはうまくはいっているのです。。。

    ただ、画面がちかちかすると指摘を受けて、今回投稿さしていただいたのです。。。

     

     

     

    2010年3月19日 1:53