• ベストアンサー

GridViewの行の入れ替えについて

redfox63の回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

データ自体の行の並び順ということでしょうか それとも列自体の並び順ということですか その並び順を示すコントロールとは何でしょう またどのようなデータを送信しますか グリッドに表示しているデータソースは何でしょう 並び順変更に際して 新たに データベースにSQLを発行するのでしょうか それとも 初回に取得したデータをセッションに登録してありそれを使い回しするのでしょうか

diolab
質問者

お礼

返信ありがとうございます。 情報が足りておらず申し訳ありません. まず、入れ替えたいのは列自体の並び順と言うことです. つまりタイトルと情報を含めた縦列全部を並び替えたいと言うことです. 説明しますと、 現在、SqlDataSourceでSQLServerより情報を取得し、 GridViewコントロールで表示させています. 並び順を示すコントロールはDropdown、checkbox、radiobutton などです. 詳細を示しますと、質問のタイトルは並び替えとなっていますが 正確には任意の位置に列を挿入したいということでもあります. 簡単に言うと、グループのメイン、サブ項目とあり、 メイン項目とサブ項目はまったく別にDBで管理されています. コントロールの選択状況によって サブ項目の挿入位置(順序)が変わるため 取り合えず全部読み込むSQLDataSouceを作っておいて 並び替えようと言うのが質問の内容です. >並び順変更に際して 新たに データベースにSQLを発行するのでしょうか >それとも 初回に取得したデータをセッションに登録してありそれを使い回しするのでしょうか これに関してはどちらでもよいと思っています. というか、DataSourceをセッションに残しておく方法は知りませんでした。 質問事項に答えられているか不安ですが、 返信をおまちしております。

関連するQ&A

  • GridViewのボタンの高さ

    vb.net(vs2005) asp.net GridViewのボタン(buttonfield)の高さを変えられないでしょうか。 ×リンク(文字列に変更し、フォントサイズを小さくする。) ×テンプレート列 以外でお願いします。 つまらないところで、困っています。(表が大きいので…)

  • ASP.NetのGridViewで任意の行クリックで選択を行う方法

    ASP.NetのGridViewコントロールで、「選択」ボタンを表示せずに、グリッド行内の任意の場所をクリックすることでその行を選択する方法がわかりません。 DataGridコントロールについての実装方法はみつけたのですが(下記URL)、同じようにGridViewコントロールで実装すると「無効なポストバックまたはコールバック引数です」というサーバーエラーが発生してしまいます。 どなたか実装する方法についてご存知の方いらっしゃいましたら宜しくお願いします。 http://www.microsoft.com/japan/msdn/vs/WebApplication/vbtchTopQuestionsAboutASPNETDataGridServerControl.aspx#vbtchtopquestionsaboutaspnetdatagridservercontrolselectingrows

  • GridView上で押下したボタンの区別の方法

    こんにちは。 今、GridViewに読み込んだレコードの行順番を入れ替えたいと思っています GridViewにボタンフィールドを二つ足して CommandNameをSelectにしました。 入れ替えるためにGridView.SelectedIndexで何行目が 押されたのか知りたいので、Selectにしています。 入れ替えるコードはできたのですが、 上に移動のボタンを押しても 下に移動のボタンを押しても 同じSelectedIndexChanged関数が呼ばれてしまい 困っています。 どちらのボタンを押したのか区別する方法はありますでしょうか? 押したボタンの行数がわかれば別の方法でもかまいません。 お力添えをお願いいたします。 以下、テーブルイメージ [編集] 列1~列xx [↑][↓] [編集] 列1~列xx [↑][↓] [編集] 列1~列xx [↑][↓]       ・ [編集] 列1~列xx [↑][↓]          ^^^^^^^^^           ↑↑ この二つのボタンのどちらを押したか区別したい

  • UpdatePanel と GridViewについて教えてください

    現在、ASP.NET(VB)にて開発を行っています。今悩んでいる事は GridView内でUpdatePanelを使用した際にエラーが表示されます。 エラー内容は下記の通りです。 InvalidCastException はユーザーコードによってハンドルされませんでした。 ______________________________________________________________________ 型 'System.Web.UI.UpdatePanel' のオブジェクト型 'System.Web.UI.WebControl.GridViewRow' にキャストできません。 どなたか、エラーの対処方をご存知の方がいらっしゃいましたらご指導宜しくお願いします。なお、ソースは下記の様に記述してみました。 <%@ Page Language="VB" %> <%@ Import Namespace="System.Data.SqlClient" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim txt As TextBox = DirectCast(sender, TextBox) Dim row As GridViewRow = DirectCast(txt.Parent.Parent, GridViewRow) CD.Text = txt.Text End Sub </script> <html> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="SM" runat="server"> </asp:ScriptManager> <asp:TextBox ID="CD" runat="server" Width="50px"></asp:TextBox> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="CD" DataSourceID="Source" ShowFooter="True"> <Columns> <asp:TemplateField HeaderText="CD"> <ItemTemplate> <asp:Label ID="lbl" runat="server" Text='<%# Bind("CD") %>'></asp:Label> </ItemTemplate> <FooterTemplate> <asp:UpdatePanel ID="UP" runat="server"> <ContentTemplate> <asp:TextBox ID="NewCD" runat="server" AutoPostBack="True" OnTextChanged="TextChanged" Width="50px"></asp:TextBox> </ContentTemplate> </asp:UpdatePanel> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="Source" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStrings %>" SelectCommand="SELECT * FROM [TABLE]" ProviderName="System.Data.SqlClient"> </asp:SqlDataSource> </form> </body> </html>

  • GridViewからの値を全件LOOPして取得したい

    GridViewについて教えてください。 <環境>ASP.NET データソースにSQLDataSourceを指定し、GridViewに全件を自動バインドして表示しています。 画面上に設置したボタン押下のイベントハンドラで、そのGridViewの全行をループして各列の値を参照したいのですが、 以下のようなに記述しても(1)の部分でNOTHINGとなりエラーになります。 どのようにすればよいでしょうか? やりたいことは、GridView全行ループし、ITEMKINDの値が"1"の時、TemplateField内にあるtxtNVERCHARの値を取得することです。 ご教授お願いします。 --------------------------------- <Columns> <asp:BoundField DataField="ITEMKIND" HeaderText="ITEMKIND" Visible="False" /> </asp:BoundField> <asp:TemplateField HeaderText="ITEM"> <ItemTemplate> <asp:TextBox CssClass="txtstr" ID="txtNVERCHAR" runat="server" Text='<%# Bind("ITEM_NVERCHAR", "{0}") %>'></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> --------------------------------- Protected Sub 更新_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExec.Click For Each row As GridViewRow In grdList.Rows Dim strITEMKIND As TextBox = DirectCast(row.FindControl("ITEMKIND"), TextBox)  ←(1) IF strITEMKIND.Text = "1" THEN Dim strDDL As TextBox = DirectCast(row.FindControl("txtNVERCHAR"), TextBox) End IF Next End Sub

  • gridviewをcsvダウンロード

    何度もお世話になります。 提題のとおり、gridviewで表示させた内容をcsvでダウンロードさせたいと思っています。 (1)ボタン押下 (2)ポップアップでダウンロード確認画面 (3)保存ボタンを押すとファイル名およびファイル保存場所を指定する画面へ (4)OKで指定ファイル名で指定のファイル保存場所へ VS C#で開発する際にはSaveFileDialogに頼っていたのですが、 ASP.NET C#にはないのでしょうか… 何度も初歩的な質問申し訳ありませんが、ご存じの方、教えていただけると幸いです。 以上、よろしくお願いいたします。

  • GridViewにバインドせずにデータを表示する方法

    環境:VS2008&VB.NET&ASP GridViewに手動でテーブルからデータを読みデータバインドせず DBの値を表示する方法を考えていますがうまくいかず困っています。 (データバインドしたくない理由はデータバインドを行っていると行の挿入や移動ができない認識のためです。) 初心者のため見当違いなことをしているかもしれませんが それも含めまして質問させていただきます。 質問1 そもそもGridViewでデータバインドせずに手動でデータを表示することは可能でしょうか。 質問2 以下のコードで試しましたが「GridView1.Controls(0).Controls.Add(row1)」でExeptionが発生してしまいました。 手順に不適格な箇所があるのでしょうか。 strSql = "SELECT * FROM Data_Table" Using connection As New SqlClient.SqlConnection(cnStr) Dim command As New SqlClient.SqlCommand(strSql, connection) connection.Open() Dim dr As SqlClient.SqlDataReader = command.ExecuteReader While (dr.Read = True) 'データあり str1 = dr("data1") str2 = dr("data2") str3 = dr("data3") End If connection.Close() Dim item1 As DataGridItem item1 = New DataGridItem(-1, -1, ListItemType.Item) Dim cell0 As TableCell = New TableCell item1.Cells.Add(cell0) Dim cell1 As TableCell = New TableCell item1.Cells.Add(cell1) Dim cell2 As TableCell = New TableCell item1.Cells.Add(cell2) Dim row1 As New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal) row1.Cells.Add(cell0) row1.Cells.Add(cell1) row1.Cells.Add(cell2) GridView1.Controls(0).Controls.Add(row1) End While End Using エラーの内容 System.ArgumentOutOfRangeException はユーザー コードによってハンドルされませんでした。 Message="指定された引数は、有効な値の範囲内にありません。 パラメータ名: index" お力添えをよろしくお願い致します。

  • GridViewの項目編集(初歩)

    いわゆるレガシー言語専門の技術者です。 事情があって、ASP.NETとVisualStudio2008(C#)でWebアプリを知人から頼まれて作っています。 クライアント/サーバ型のシステム開発歴は長いのですが、Web系は全くと言って良いほど経験がありません(個人商店のホームページを作ったくらいです)。 要件は以下のようになります。 検索条件を入力 →DBのマスタ検索 →対象データをGridViewに一覧表示 →項目を直接編集  ※解説サイトによくある、GridViewにボタンが配置してあって、ボタン押下で編集モードに移行する動きはNGです。あくまでも直接編集できなければいけません。 →入力後、更新ボタン押下により、画面情報でDB一括更新 この、GridViewの項目を直接編集するには、何というコントロールを使い、データベースと連動させるにはどうすれば良いのかが、さっぱりわかりません。 自力で頑張ってみたのですが、DBの値をGridViewに表示するには、asp:BoundField を使い、DataField にDBの項目名を指定すれば「表示」はされるところまでは確認できました。 ただ、これだと「編集」が出来ない...どうやら、asp:TemplateField というものを使うようだが、DBとバインドさせる方法は?編集可能にするには? ネットで色々と調べたのですが、(理解力が低いせいもあり)そのものズバリな表現で説明しているサイトは殆どなく、頭がパニックで力が尽きてしまいそうです。 私はWeb開発には向いていないのかも知れませんが、諸事情により、今回は何としてもやり遂げないといけません。 どなたか助けてください、よろしくお願いします。

  • ASP.NET2.0 GridViewのページャー設定について

    お世話になります。 現在VS2005のASP.NETを学習しております。 GridViewコントロールのページャー設定について質問があります。 500レコード程のデータを1ページに10件ずつ表示しようと思い、 GridViewコントロールのPagerSettingsプロパティのVisibleをTrueに設定しました。 それだけでテーブル下にページ番号リンクが表示され、とても簡単で感動しました。 その後、同じくPagerSettingsプロパティのModeをNumericからNextPreviousに変更するなど、いろいろ試していました。 そこで気づいたのですが、そのモードの中にFirstLastとNumericが一緒になったものはあるのですが、 NextPreviousとNumericが一緒になったモードがありません。 冷静に考えると現在のページ番号の両隣のリンクを押せばいいだけなのですが、 頑固な方がどうしてもページ番号と前へ・次へボタンを一緒にしてくれと頼まれた場合、 そのようにカスタマイズすることは可能なのでしょうか? また可能な場合、どのようにすれば実現できるのでしょうか? 知っている方がいたら、どうぞ宜しくお願いします。

  • 各イベントの共通の前処理は存在する?(VB.NET)

    VS.NET2003,VBについての質問です。 ASP.NETでは、WebControlsのイベントを発生させるたびに(ボタンを押したり、テキスト変更したりなど)、 Page_Load>WebControlsイベントの順番で、イベントが発生することを確認しました。 Windowsアプリケーションにおいて、上記のPage_Loadに該当するイベントは存在するでしょうか。 つまり、Windows.Formsコントロールのイベント処理が発生するたびに、その前処理として実行される、上記のPage_Loadのような共通のイベントは存在するでしょうか。 以上、どうぞよろしくお願い致します。