私は C#-4.0 で Asp.Net に取り組んでいます。GridView でエンド ユーザーから入力を取得したい。お気に入り
DropDownList または TextBox に値を入力して [追加] をクリックすると、新しいレコードが追加されますが、以前のデータは失われます。
問題は、コントロールの値を変更すると、バインドされている DataTable に保存されないことです。この値を DataTable に保存するにはどうすればよいですか。ここで見逃したコードは何ですか?
デザイナーコード:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="SaleOrder.aspx.cs" Inherits="Transactions_SaleOrder" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
<style type="text/css">
.style1
{
width: 100%;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FormHeader" Runat="Server">
<p>Sale Order</p>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="FormBody" Runat="Server">
<table class="style1">
<tr>
<td>
<asp:Label ID="lblDate" runat="server" Text="Date : "></asp:Label>
<asp:TextBox ID="txtSODate" runat="server"></asp:TextBox>
<asp:CalendarExtender ID="txtSODate_CalendarExtender" runat="server"
Enabled="True" TargetControlID="txtSODate" Format="dd/MM/yyyy" PopupButtonID="ImageButton1">
</asp:CalendarExtender>
<asp:MaskedEditExtender ID="txtSODate_MaskedEditExtender" runat="server"
Enabled="True" Mask="99/99/9999" MaskType="Date" TargetControlID="txtSODate">
</asp:MaskedEditExtender>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/Calendar_scheduleHS.png" />
</td>
</tr>
<tr>
<td>
Shift :
<asp:DropDownList ID="DropDownList1" runat="server" Width="300px">
<asp:ListItem Value="Morning">MORNING</asp:ListItem>
<asp:ListItem Value="EVENING"></asp:ListItem>
<asp:ListItem Value="OTHERS"></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" GridLines="None"
onrowcommand="GridView1_RowCommand">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:TemplateField HeaderText="Product">
<ItemTemplate>
<asp:DropDownList ID="ddlProduct" runat="server" Width="300"
DataSource='<%# dtProductMaster %>'
DataTextField="PDescr"
DataValueField="PID"
>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Qty">
<ItemTemplate>
<asp:TextBox ID="txtQuan" runat="server" MaxLength="5" style="text-align:right" Text='<%# BIND("QUAN") %>'></asp:TextBox>
<asp:MaskedEditExtender ID="txtQuan_MaskedEditExtender" runat="server" Enabled="True"
Mask="99999" TargetControlID="txtQuan">
</asp:MaskedEditExtender>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" />
</asp:TemplateField>
<asp:ButtonField CommandName="ADD" Text="Add" />
<asp:ButtonField CommandName="DELETE" Text="Delete" />
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnSave" runat="server" Text="Save" Width="58px" />
</td>
</tr>
</table>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="FormFooter" Runat="Server">
</asp:Content>
その背後にあるC#コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class Transactions_SaleOrder : System.Web.UI.Page
{
internal DataTable dtProductMaster_;
internal DataTable dtProductMaster
{
get
{
if (dtProductMaster_ == null)
{
clsData d = new clsData();
d.Select("select PID, PEDESCR2 + ' ' + PEDESCR3 as PDescr From TBLPROD_MAST");
dtProductMaster_ = d.DataTable;
}
return dtProductMaster_;
}
}
DataTable dtProductDet
{
get
{
if (ViewState["dtProductDet"] != null)
{
return (DataTable)ViewState["dtProductDet"];
}
else
{
return null;
}
}
set
{
ViewState["dtProductDet"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txtSODate.Text = DateTime.Now.Date.ToString("dd/MM/yyyy");
//--
dtProductDet = new DataTable("dtProductDet");
dtProductDet.Columns.Add("PID", typeof(int));
dtProductDet.Columns.Add("PName", typeof(string));
dtProductDet.Columns.Add("Quan", typeof(decimal));
dtProductDet.Rows.Add(0,"",0);
//--
}
GridView1.DataSource = dtProductDet;
GridView1.DataBind();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName.ToUpper())
{
case "ADD":
dtProductDet.Rows.Add(0, "", 0);
break;
case "DELETE":
dtProductDet.Rows.RemoveAt(Convert.ToInt32(e.CommandArgument));
break;
}
}
}
どうすれば私の目標を達成できますか。