GridViewの項目編集(初歩)

このQ&Aのポイント
  • GridViewの項目を直接編集する方法とデータベースとの連動方法について解説します
  • ASP.NETとVisualStudio2008(C#)を使用して、GridViewの項目編集を行う方法を詳しく解説します
  • GridViewにおけるデータベースとのバインド方法や編集可能にする方法について説明します
回答を見る
  • ベストアンサー

GridViewの項目編集(初歩)

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

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

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.1

> ※解説サイトによくある、GridViewにボタンが配置してあって、ボタン押下で編集モードに移行する動きはNGです。あくまでも直接編集できなければいけません。 このような実装がもとめられているのであればGridViewを使うのがそもそも間違いかと思います。 GridViewのようなコントロールは便利ですが、ある一定の使い方を前提に、そのうえで便利なものとして提供されています。 そこからはずれた使い方をする場合は逆にものすごく不便というか、できなくはないけど大変な苦労が必要になります。 http://msdn.microsoft.com/ja-jp/library/aa992036(v=vs.90).aspx いちおう、こんなチュートリアルは提供されていますので、これを参考にがんばってみてください、としかいいようがないかな。

関連するQ&A

  • GridView表示の高速化

    開発環境:VB.NET&ASP いつもお世話になっています。 現在、上記環境でWebアプリの開発を行っていますが GridView表示に時間がかかり過ぎているため表示を高速化する手段を探しています。 現状、GridViewを表示する際には以下の時間がかかっています。 ・270件→約8秒から9秒 ・540件→約35秒から36秒 検索しましたが回避策を得ることが出来ませんでしたので有用な手段など ご存知の方がいらっしゃいましたらご教授いただきたく思います。 よろしくお願い致します。 GridViewは以下の定義となっています。 ------------------------------------------------------------ <asp:ButtonField ButtonType="Button" CommandName="InsertCommand" HeaderText="A" ShowHeader="True" Text="A" /> <asp:ButtonField ButtonType="Button" CommandName="EditCommand" HeaderText="B" ShowHeader="True" Text="B" /> <asp:ButtonField ButtonType="Button" CommandName="MoveCommand" HeaderText="C" ShowHeader="True" Text="C" /> <asp:ButtonField ButtonType="Button" CommandName="PasteCommand" HeaderText="D" ShowHeader="True" Text="D" /> <asp:BoundField DataField="seq" HeaderText="E" SortExpression="E" /> <asp:BoundField DataField="F" HeaderText="F" SortExpression="F" /> <asp:BoundField DataField="G" HeaderText="G" SortExpression="G" /> <asp:BoundField DataField="H" HeaderText="H" SortExpression="H" > <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="I" HeaderText="I" SortExpression="I" /> <asp:BoundField DataField="J" HeaderText="J" SortExpression="J" > <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="K" HeaderText="K" SortExpression="K" ItemStyle-HorizontalAlign="Left" > <ItemStyle HorizontalAlign="Left" /> </asp:BoundField> <asp:BoundField DataField="L" HeaderText="L" SortExpression="L" ItemStyle-HorizontalAlign="Left" > <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="M" HeaderText="M" SortExpression="M" > <ItemStyle HorizontalAlign="Left" /> </asp:BoundField> <asp:BoundField DataField="N" HeaderText="N" SortExpression="N" ItemStyle-HorizontalAlign="Left" > <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="O" HeaderText="O" SortExpression="O" ItemStyle-HorizontalAlign="Left" > <ItemStyle HorizontalAlign="Left" /> </asp:BoundField> <asp:TemplateField HeaderText="P" SortExpression="P"> <EditItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("P") %>' /> </EditItemTemplate> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("P") %>' Enabled="true" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> ------------------------------------------------------------ VB.NETソース ------------------------------------------------------------ Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("connect").ConnectionString strSql = "SELECT E, F, G, H, I, J, K, L, M, N, O, P FROM TABLE_NAME WHERE X = '" & Ddl.SelectedValue & "' ORDER BY E" Dim connection As New SqlClient.SqlConnection(cnStr) Dim adapter As New SqlClient.SqlDataAdapter(strSql, connection) adapter.Fill(ds) GridView1.DataSource = ds GridView1.DataBind() ------------------------------------------------------------

  • 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

  • TemplateFieldで入力制限

    GridViewについて教えてください。 <環境>ASP.NET データソースにSQLDataSourceを指定し、GridViewに全件を自動バインドして表示しています。 GridViewではTemplateField内にtxtNVERCHARをtxtDECIMALを作成し、txtDECIMAL入力後に"\999,999"と表示するよう "\"とカンマ編集をおこないたいと思っています。 txtDECIMALのTextChangedイベントを使えばいいのかと思ったのですがどのように記述すればよいかわかりません。 ご教授お願いします。 --------------------------------- <Columns> <asp:BoundField DataField="NO" HeaderText="NO" Visible="False" /></asp:BoundField> <asp:TemplateField HeaderText="ITEM"> <ItemTemplate> <asp:TextBox ID="txtNVERCHAR" runat="server" Text='<%# Bind("ITEM_NVERCHAR", "{0}") %>'></asp:TextBox> <asp:TextBox ID="txtDECIMAL" runat="server" Text='<%# Bind("ITEM_DECIMAL", "{0:c}") %>'></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> --------------------------------- Protected Sub txtDECIMAL_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim textbox As TextBox = DirectCast(sender, TextBox) Dim qty As String = textbox.Text ☆ここからが不明☆ End Sub ---------------------------------

  • ASP.NET GridView につきまして

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

  • gridviewの値でセッション書きこみ

    現在、ASP.netにて以下のようなアプリを処理を実施しようとしています。 画面A(gridview使用) ------------------------------- 名前A | 項目A |備考A ------------------------------- 名前B | 項目B |備考B ------------------------------- 名前C | 項目C |備考C ------------------------------- ソース <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="False" DataSourceID="ods1" > <Columns> <asp:BoundField DataField="namae" HeaderText="名前" SortExpression="namae" > </asp:BoundField> <asp:BoundField DataField="koumoku" HeaderText="項目" SortExpression="koumoku" > </asp:BoundField> <asp:BoundField DataField="bikou" HeaderText="備考" SortExpression="bikou" > </asp:BoundField> </Columns> </asp:GridView> このようなときに、2行目をクリックしたときは  session(name) = "B" のようにクリックする行によってsessionを書くにはどうのようにすでばよいのでしょうか? 対応方法があれば教えてください。

  • 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>

  • ASP.NET GRID VIEWの画像表示

    ASP.NET+ACCESSで簡単なデーターベースを作成しています。まったくの初心者です。 Grid Viewでデーターを表示させています。そこに画像を表示させたいと思ってます。画像はACCESSに直接保存させています。 ACCESSにはロングバイナリーと表示されて保存されています。 Grd ViewにはSystem.Byte[]と表示されてしまいます。マイクロソフトのVisual Web Developer 2008で作成しています。Gird Viewの項目のプロパティなどの設定でバイナリデータを画像として表示させることは可能でしょうか? いろいろネットで調べましたが該当するサイトがなくて困ってしまいました。 こちらは、画像のパスで表示する方法でした。 http://www.atmarkit.co.jp/fdotnet/dotnettips/807aspgridvwimage/aspgridvwimage.html こちらも画像のパスで登録でした。 http://msdn.microsoft.com/ja-jp/library/aa479350.aspx もしくは、このようなコードの画像の項目の部分を何か書き換えればよいのでしょうか? <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="AccessDataSource1"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> <asp:ImageField DataAlternateTextField="ImgData"> </asp:ImageField> </Columns> </asp:GridView> まったくの素人で申し訳ございません。よろしくお願いします。

  • CommandFieldでの行毎表示切り替え

    ASP.NET(C#)を初めて使う者です。 GridViewにDBのデータをバインドし、先頭カラムをCommandFieldにして[削除]ボタンをつけています。 (<asp:CommandField ShowDeleteButton="True" />) DBからバインドした、別のあるカラムの値によって、この[削除]ボタンの表示/非表示を切り替えたいと思っています。いろいろ調べてみましたがやり方がわかりませんでした。 そもそも、CommandFieldで行毎に表示/非表示を切り替えることは可能なのでしょうか。

  • GridView利用の元のページ位置に戻るには

    ASP.NETにて、Visual Basicを利用して、Webアプリを開発しています。 先日は、掲示板に疑問点を投稿したところ、有益なアドバイスをいただきました。ありがとうございました。 別件ですが、次のことを実現しようとしています。 1.編集者用ページ for_editors.aspx(GridView利用)にて、ページャ機能を有効にして、投稿された全記事を表示する。右列には、各記事に対応する編集ボタンを設置しています。 2.目的とする記事の編集ボタンのクリックにより、details.aspxページ(FormView利用)にとび、該当記事の編集ページ(更新ボタン設置)を表示する。 3.編集を実施し更新ボタンを押した後、上記1.の、クリックした記事のある編集者用ページの元の位置にダイレクトに戻り、編集内容を確認する。 しかし、上記3.に関し、いろいろ調べておりますが、やり方がわかりません。 方法に関し、アドバイスをいただければ有難く存じます。 よろしくお願い申し上げます。

  • GridViewのデータソース

    VisualStudio2005で開発をしています。 ASP.NETでDBからデータを抽出し、そのデータを少し編集し、画面に表示とExcelにデータを出力しています。 Excelに出力をする関係上、データをDataTableで取得した後に、二次元配列に編集をしています。その配列に編集したデータをGridViewを使って表示させようかと思っています。 二次元配列の値を簡単にGirdViewのデータソースに設定することはできるのでしょうか? 二次元配列ではなくDataTableに編集してもよかったのですが、そうするとExcelに出力するのが行数分Loopさせなければならなくなるようなので・・・。 よろしくお願いします。