🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

2354閲覧

GridViewとDetailsViewを連動させる方法

Ecarlat

総合スコア6

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2019/12/22 12:24

編集2019/12/22 19:16

<開発環境>
Microsoft Windows 10
Microsoft Visual Studio Community 2019 Version 16.4.2
Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.8.4075.0
Microsoft Access Office365 -1911

ASP.NETを使って、Webによる顧客との面談リストを作成しています。
GridViewを用いて、「訪問日」、「顧客名」、「報告者」などをテーブル表示させ、さらに検索条件をDropDownListやTextBoxに入力することで
GridViewに表示させるデータの絞込みを実施させています。ここまでは、現時点でできています。
ただ、現時点ですとデータベース(Access)を開き直接データ追加、編集、削除を実施しているので、
この作業もWeb上でできるようにしたいと考えています。

そのため、上記のaspxファイルに、GridViewに連携させたDetailViewを追加し、データの追加、編集、削除などはDetailsViewで実施させようと思ったのですが、Webで開いても本来GridViewに表示するはずの元データ(絞込みする間には全データが表示するはず)自体が、表示しなくなってしまいました。
GridViewとDetailsViewは「Report_Id」をキーに連携のどこかに問題があるのだと思い調べては見たもののなかなか解決に至っておりません。

確認すべき箇所、あるいはこのようなコードを記載する際の注意点等ご教示いただけないでしょうか。
不足情報あれば、追記するようにします・
どうぞよろしくお願いします。

<asp:GridView  ID="GridView1"  runat="server"  DataKeyNames="Report_Id"  AutoGenerateColumns="False"  DataSourceID="SqlDataSource1">  <Columns>   <asp:CommandField    ShowSelectButton="True"    ButtonType="Button" />   <asp:HyperLinkField    DataNavigateUrlFields="File_Name"    DataNavigateUrlFormatString="/Report_Strage/{0}"    DataTextField="Visit_Date"    DataTextFormatString="{0:yyyy/MM/dd}"    HeaderText="面談日">   </asp:HyperLinkField>   <asp:TemplateField     HeaderText="顧客名">    <ItemTemplate>     <asp:Label      id="Label1"      runat="server"      Text='<%# Bind("Customer_NameEng") %>'>     </asp:Label><br />     <asp:Label      id="Label2"      runat="server"      Text='<%# Bind("Customer_NameLoc") %>'>     </asp:Label>    </ItemTemplate>   </asp:TemplateField>   <asp:BoundField    DataField="Customer_Country"    HeaderText="所在国">   </asp:BoundField>   <asp:BoundField    DataField="Supply_Product"    HeaderText="供給製品">   </asp:BoundField>   <asp:BoundField    DataField="Apprication"    HeaderText="使用用途">   </asp:BoundField>   <asp:BoundField    DataField="Reporter_Name"    HeaderText="報告者">   </asp:BoundField>   <asp:BoundField    DataField="Reporter_Section"    HeaderText="報告部署">   </asp:BoundField>   <asp:BoundField    DataField="Report_Id"    HeaderText="Report_Id"    InsertVisible="False"    ReadOnly="True"    Visible="False" />  </Columns>  <EmptyDataTemplate>   <asp:Label    id="Label4"    runat="server"    Text="該当するデータがありません。&lt;br&gt;抽出条件を指定してから「検索」ボタンをクリックしてください。">   </asp:Label>  </EmptyDataTemplate> </asp:GridView> <asp:DetailsView  ID="DetailsView1"  runat="server"  AutoGenerateRows="False"  DataKeyNames="Report_Id"  DataSourceID="SqlDataSource1"  DefaultMode="Insert">  <Fields>   <asp:BoundField    DataField="Reporter_Name"    HeaderText="報告者" />   <asp:BoundField    DataField="Reporter_Section"    HeaderText="報告部署" />   <asp:BoundField    DataField="Visit_Year"    HeaderText="Visit_Year" />   <asp:BoundField    DataField="Visit_Date"    HeaderText="訪問日" />   <asp:BoundField    DataField="Customer_NameLoc"    HeaderText="顧客名" />   <asp:BoundField    DataField="Customer_NameEng"    HeaderText="顧客名(英語)" />   <asp:BoundField    DataField="Customer_Country"    HeaderText="所在国" />   <asp:BoundField    DataField="Supply_Product"    HeaderText="供給製品" />   <asp:BoundField    DataField="Apprication"    HeaderText="使用用途" />   <asp:BoundField    DataField="File_Name"    HeaderText="報告書ファイル名" />   <asp:CommandField    ButtonType="Button"    ShowInsertButton="True"    ShowDeleteButton="True"    ShowEditButton="True" />  </Fields> </asp:DetailsView> <asp:SqlDataSource  ID="SqlDataSource1"  runat="server"  ConnectionString="<%$ ConnectionStrings:ConnectionString %>"  DeleteCommand="DELETE FROM [Tbl_Data_Report] WHERE [Report_Id] = ?"  InsertCommand="INSERT INTO [Tbl_Data_Report] ([Report_Id], [Reporter_Name], [Reporter_Section], [Visit_Year],   [Customer_NameLoc], [Customer_NameEng], [Customer_Country], [Supply_Product], [Apprication], [File_Name])   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"  ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"  SelectCommand="SELECT * FROM [Tbl_Data_Report]   WHERE (([Visit_Year] LIKE '%' + ? + '%') AND ([Reporter_Name] LIKE '%' + ? + '%') AND ([Customer_Country] LIKE '%' + ? + '%')   AND ([Reporter_Section] LIKE '%' + ? + '%') AND ([Customer_NameEng] LIKE '%' + ? + '%')   AND ([Apprication] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%'))   OR (([Visit_Year] LIKE '%' + ? + '%') AND ([Reporter_Name] LIKE '%' + ? + '%') AND ([Customer_Country] LIKE '%' + ? + '%')   AND ([Reporter_Section] LIKE '%' + ? + '%') AND ([Customer_NameLoc] LIKE '%' + ? + '%')   AND ([Apprication] LIKE '%' + ? + '%') AND ([Supply_Product] LIKE '%' + ? + '%'))   ORDER BY [Visit_Date] DESC, [Customer_NameEng]"  UpdateCommand="UPDATE [Tbl_Data_Report] SET [Reporter_Name] = ?, [Reporter_Section] = ?, [Visit_Year] = ?,   [Customer_NameLoc] = ?, [Customer_NameEng] = ?, [Customer_Country] = ?, [Supply_Product] = ?, [Apprication] = ?,   [File_Name] = ? WHERE [Report_Id] = ?"> <DeleteParameters>  <asp:Parameter   Name="Report_Id"   Type="Int32" /> </DeleteParameters> <InsertParameters>  <asp:Parameter   Name="Report_Id"   Type="Int32" />  <asp:Parameter   Name="Reporter_Name"   Type="String" />  <asp:Parameter   Name="Reporter_Section"   Type="String" />  <asp:Parameter   Name="Visit_Year"   Type="String" />  <asp:Parameter   Name="Customer_NameLoc"   Type="String" />  <asp:Parameter   Name="Customer_NameEng"   Type="String" />  <asp:Parameter   Name="Customer_Country"   Type="String" />  <asp:Parameter   Name="Supply_Product"   Type="String" />  <asp:Parameter   Name="Apprication"   Type="String" />  <asp:Parameter   Name="File_Name"   Type="String" /> </InsertParameters> <SelectParameters>  <asp:ControlParameter   ControlID="DropDownList1"   DefaultValue="%"   Name="Visit_Year"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList2"   DefaultValue="%"   Name="Reporter_Name"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList3"   DefaultValue="%"   Name="Customer_Country"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList4"   DefaultValue="%"   Name="Reporter_Section"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="TextBox1"   DefaultValue="%"   Name="Customer_NameEng"   PropertyName="Text"   Type="String" />  <asp:ControlParameter   ControlID="TextBox2"   DefaultValue="%"   Name="Apprication"   PropertyName="Text"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList5"   DefaultValue="%"   Name="Supply_Product"   PropertyName="SelectedValue"   Type="String" />  <asp:Parameter   Name="Report_Id"   Type="Int32" />  <asp:ControlParameter   ControlID="DropDownList1"   DefaultValue="%"   Name="Visit_Year"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList2"   DefaultValue="%"   Name="Reporter_Name"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ontrolID="DropDownList3"   DefaultValue="%"   Name="Customer_Country"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList4"   DefaultValue="%"   Name="Reporter_Section"   PropertyName="SelectedValue"   Type="String" />  <asp:ControlParameter   ControlID="TextBox1"   DefaultValue="%"   Name="Customer_NameLoc"   PropertyName="Text"   Type="String" />  <asp:ControlParameter   ControlID="TextBox2"   DefaultValue="%"   Name="Apprication"   PropertyName="Text"   Type="String" />  <asp:ControlParameter   ControlID="DropDownList5"   DefaultValue="%"   Name="Supply_Product"   PropertyName="SelectedValue"   Type="String" />  <asp:Parameter   Name="Report_Id"   Type="Int32" /> </SelectParameters> <UpdateParameters>  <asp:Parameter   Name="Reporter_Name"   Type="String" />  <asp:Parameter   Name="Reporter_Section"   Type="String" />  <asp:Parameter   Name="Visit_Year"   Type="String" />  <asp:Parameter   Name="Customer_NameLoc"   Type="String" />  <asp:Parameter   Name="Customer_NameEng"   Type="String" />  <asp:Parameter   Name="Customer_Country"   Type="String" />  <asp:Parameter   Name="Supply_Product"   Type="String" />  <asp:Parameter   Name="Apprication"   Type="String" />  <asp:Parameter   Name="File_Name"   Type="String" />  <asp:Parameter   Name="Report_Id"   Type="Int32" />  </UpdateParameters> </asp:SqlDataSource> </asp:Content>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/22 12:54

前にもお願いしましたが一行を長くしないで適宜改行を入れてください。それから、質問本来の動作に関わらない余計な部分(スタイルに関するプロパティの設定など)は削除してください。このスレッドにアップされたコードは質問者さん自身も読む気がしないのでは? 赤の他人の回答者・閲覧者はなおさらです。読んでもらえなければ話が始まらないのですから、読んでもらえる努力をしましょう。 質問欄を編集して直してください。
退会済みユーザー

退会済みユーザー

2019/12/22 13:02

それから、ツギハギしているうちにおかしくなってしなったというコードを丸投げして、それを赤の他人の回答者に読んでデバッグしてくれと言うのは歓迎されないと思います(はっきり言うと甘えすぎです)。自分で切り分けしてその結果を書くとか、もう少し何とかなりませんか?
Ecarlat

2019/12/22 19:29

前回同様、コメントいただきありがとうございます。 少し意識して記載したつもりでしたが、まったくもって不十分でしたので 修正させていただきました。 ツギハギの件については、私の表現方法に問題がありました。 決して、丸投げしたつもりはなく、本やネット等でいろいろ調べた結果です。 実際に「絞込みとGridViewの表示」、「GridViewとDetailsViewを一緒に表示」している例はいくつかあったので参考にしたのですが、「絞込み、GridViewとDetailsView」を表現したものずばりはなく、 またエラーも出ないため、このような場合どこに注視すればよいかの助言をいただきたく質問した次第です。ご理解いただけると幸いです。
退会済みユーザー

退会済みユーザー

2019/12/22 21:28

ネットで調べたとのことですが、SqlDataSource を GridView と DetailsView が共有している例があったのですか? その URL を書いてください。
Ecarlat

2019/12/22 21:43

ありがとうございます。 私が参考にしたのは、書籍のASP.NET 2.0 実践サンプル集で、その中に6-3 GridViewとDetailsViewを連動させるとの項を参考にしました。 ただ、先にも書きました通り、そのコードでは私がも実行したいものではありませんでしたので、試行錯誤したコードが記載したものです。 現在外出してしまったので、帰宅後サンプルコードを記載するようにします。
退会済みユーザー

退会済みユーザー

2019/12/22 21:59

記載しなくて良いので、よく読んで上にコメントしたあたりがどうなっているか調べてみてください。 あと、GridView DetailsView をキーワードにググるとサンプルが多々ヒットするので、それもよく読んでください。
guest

回答1

0

質問者さんは去ってしまったようですが、自分が関わったスレッドがこのまま放置されて終わってしまうのも気分が良くないので、回答欄に質問者さんのコードで問題と思われる点を書いておきます。

質問のコメント欄に書きましたが、GridView と DetailsView が一つの SqlDataSource を共有しているという点が致命的です。

Select コマンドが必ず異なるので共有はできないはず。ひょっとして、自分が知らないところでそういう例があったのかと質問者さんに聞きましたが、返事がないので多分なかったのだろうと想像してます。

GridView が使う Select コマンドは、DetailsView を追加する前は期待通り動いていたということなら、質問のソースにアップされている SqlDataSource1 のもので良いかもしれませんが、DetailsView が使う Select コマンドがそれと同じものを使えるわけがないです。

GridView の選択ボタンをクリックすると、クリックされた行の主キーで選択されたレコードが DetailsView に表示されるようにしないとダメなはず。

具体的な作り方は、GridView と DetailsView をキーワードにググってヒットする一番最初の記事(URL 下記)に出ています。

GridViewとDetailsViewでデータ管理ページを作成する
https://codezine.jp/article/detail/379

上の記事の 2 ページ目で DetailsView 用に GridView 用とは別の SqlDataSource2 を追加し、その Select コマンドの WHERE 句に GridView の SelectedValue を設定しているところに注目してください。

投稿2019/12/25 02:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問