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(); } } }
回答2件
あなたの回答
tips
プレビュー