質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
86.12%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

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

解決済

ASP.NET GridViewのデータ判別方法

mimi77
mimi77

総合スコア27

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

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

2回答

0リアクション

0クリップ

279閲覧

投稿2022/08/26 08:52

編集2022/08/27 01:42

OS windows10
Visual Studio2019
.NET Framework 4.8

ASP.NETでWeb Formsを作成しています。
ASP.NETでグリッドビューを作成し、そこへデータを入力しています。
「確定」というボタンを押すと、入力したデータをテーブルへインサートし、
その後そのデータを帳票へ出力するというシステムを作成しています。
GridViewには、asp:TextBoxやasp:DropDownListを設定しております。

実現したいこと

実現したいこととしては、インサートをすればテーブルにデータがどんどんたまっていきますが、
帳票へ出力したいのはあくまでGridViewに入力したデータのみを出力したいです。

流れとしては
GridViewにデータ入力 → 確定 → テーブルへインサート → 帳票出力(GridViewのデータのみ)

となります。

GridViewには複数行データが入力可能です。

発生している問題・エラーメッセージ

テーブルからの印刷はできるのですが、今GridViewに入力したデータかどうかをどのように判定してよいかががわかりません。
インサートする際に、アイデンティティを振ろうかと思ったのですが、番号のみではどのタイミングでインサートがされたかが不明なため困っております。

イメージとしては、1回目にインサートを行ったデータ(複数)に対しては 1 2回目にインサートをを行ったデータに対しては 2 といったようなインサートごとにグループ分けするための値を入れれば良いでしょうか。

<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="false" CssClass="gridview_table_style" OnRowDataBound="gvData_RowDataBound" OnDataBound="gvData_DataBound" OnRowCreated="ContactList_RowCreated" style="margin: 10px 0 0 50px" ShowHeaderWhenEmpty="True"> <HeaderStyle Wrap="false" /> <Columns> <asp:TemplateField> <HeaderTemplate>名前</HeaderTemplate> <ItemTemplate> <asp:TextBox ID="txtName" Text='<%# Bind("NM_KANJI") %>' runat="server" style="text-align:left" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>郵便番号</HeaderTemplate> <ItemTemplate> <asp:TextBox ID="txtPostCode" Text='<%# Bind("ZIP_CODE_RQU") %>' CssClass="input_10 width_td_150_0 display_inlineblockt cv_hyphen cv_tolower ci_postal" runat="server" MaxLength="8" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>住所-</HeaderTemplate> <ItemTemplate> <asp:TextBox ID="txtAddress" Width="300px" Text='<%# Bind("ADDRESS") %>' runat="server" style="text-align:left" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>電話番号</HeaderTemplate> <ItemTemplate> <asp:TextBox ID="txtPhoneNum" Text='<%# Bind("PHONE") %>' runat="server" CssClass="width_td_150_0 ci_tel cv_tolower ci_maxlength20" MaxLength="13" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>商品名</HeaderTemplate> <ItemTemplate> <asp:DropDownList ID="Listbox_shohin" Text='<%# Bind("SHOHIN_NM") %>' runat="server" style="text-align:left" /> <asp:HiddenField ID="hdnHenreiCode" runat="server" Value='<%# Bind("HENREI_CODE") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> aspx側 確定ボタンの記述 <asp:Button CssClass="gray inline" ID="Button2" Text="確定"  runat="server" OnClick="btn_Confirm_Click" /> C# 側 確定ボタンを押した際の処理 protected void btn_Confirm_Click(object sender, EventArgs e) { if (CheckInput()) { SqlConnection oConn = DBConnectionClass.DBConnect(); using (SqlCommand command = oConn.CreateCommand()) { SqlTransaction tran = oConn.BeginTransaction(IsolationLevel.ReadCommitted); foreach (GridViewRow gvData_Row in gvData.Rows) { InsertData(tran, gvData_Row); } } }   } この時点でインサートは行われています。(DBを更新するとGridviewのデータが入っています。) この直後に帳票へデータ出力を行います。 C# 側 InsertDataの処理 protected void InsertData(SqlTransaction tran, GridViewRow rowData) { SqlConnection oConn = DBConnectionClass.DBConnect(); using (SqlCommand command = oConn.CreateCommand()) { TextBox txtName = (TextBox)rowData.FindControl("txtName"); TextBox txtPostCode = (TextBox)rowData.FindControl("txtPostCode"); TextBox txtAddress = (TextBox)rowData.FindControl("txtAddress"); TextBox txtPhoneNum = (TextBox)rowData.FindControl("txtPhoneNum"); DropDownList Listbox_shohin = (DropDownList)rowData.FindControl("Listbox_shohin"); string RQUESTDES = ListboxSelect.Text; string Estimate_Nm = lblEstimatedisp.Text; string InformantCode = hidInformantCode.Value; string Remarks = txtremarks.Text; string Estimatenm = txtEstimatenm.Text; if (txtName.Text == "" && txtPostCode.Text == "" && txtAddress.Text == "" && txtPhoneNum.Text == "") { } else{ command.CommandText = string.Format(@" INSERT INTO M_HENREI (ESTIMATE_NO ,RQUESTDES ,NM_KANJI ,ZIP_CODE_RQU ,ADDRESS ,PHONE ,SHOHIN_NM ,INFORMANT_CODE ,REMARKS ,KENMEI) VALUES ( '{0}' ,'{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}' ,'{6}' ,'{7}' ,'{8}' ,'{9}')" , Estimate_Nm , RQUESTDES , string.IsNullOrEmpty(((TextBox)rowData.FindControl("txtName")).Text) ? "" : ((TextBox)rowData.FindControl("txtName")).Text , string.IsNullOrEmpty(((TextBox)rowData.FindControl("txtPostCode")).Text) ? "" : ((TextBox)rowData.FindControl("txtPostCode")).Text , string.IsNullOrEmpty(((TextBox)rowData.FindControl("txtAddress")).Text) ? "" : ((TextBox)rowData.FindControl("txtAddress")).Text , string.IsNullOrEmpty(((TextBox)rowData.FindControl("txtPhoneNum")).Text) ? "" : ((TextBox)rowData.FindControl("txtPhoneNum")).Text , string.IsNullOrEmpty(((DropDownList)rowData.FindControl("Listbox_shohin")).Text) ? "" : ((DropDownList)rowData.FindControl("Listbox_shohin")).Text ,InformantCode ,Remarks ,Estimatenm ); command.ExecuteScalar(); oConn.Dispose(); } } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/08/26 09:24 編集

> ASP.NETでグリッドビューを作成し、そこへデータを入力しています。 カタカナでグリッドビューと書くのはやめましょう。System.Web.UI.WebControls 名前空間の GridView コントロールのことなら GridView と書いてください。 でも、違うみたいですね。System.Web.UI.WebControls 名前空間の GridView コントロールには「データを入力して・・・」とかいう機能はありません。少なくともデフォルトでは。 何なのですか?
mimi77

2022/08/26 09:35

ご回答ありがとうございます。 質問内容に追記、訂正を行いました。
SurferOnWww

2022/08/26 09:53

上にも書きましたが、デフォルトでは コントロールには「データを入力して・・・」とかいう機能はありません。何か特別なことをしてるならそれを詳しく書いてください。
mimi77

2022/08/26 10:20

GridViewのコードを追記しました。
SurferOnWww

2022/08/26 11:23

そのコードで "「確定」というボタンを押すと、入力したデータをテーブルへインサートし" というところまででさえも動いているとは思えないのですが? そこが動いているというところまでコードを開示できませんか?
mimi77

2022/08/26 22:18

かしこまりました。現在コードを見られる状態では無いため、本日の午前中にコードをアップ致します。
SurferOnWww

2022/08/27 02:29

主キーは何ですか? foreach (GridViewRow gvData_Row in gvData.Rows) のループでレコードを INSERT する際、INSERT した主キーの値が取得できますか? できるのであれば、それを Session に保持しておいて、帳票出力の際は Session から主キーを取得して、その主キーのレコードを SELECT すればよさそうですが。
SurferOnWww

2022/08/27 22:00

ASP.NET は web アプリだから複数・多数の異なるユーザーがアクセスしてきて INSERT すると思いますが、ユーザー別に、そのユーザーが INSERT したレコードのみを帳票に出力する場合、質問者さんの回答にあるフラグ案では対応できませんけど? それに対応する必要があるなら、上のコメントに書いた主キーを Sessionに保持する方法で考えてはいかが? DB に手を加えて、余計なフィールドを追加しなくてすみますし。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

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