私はグリッドビューをフォローしています:
<asp:Panel ID="pnlScroll" runat="server" ScrollBars="Auto">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GVCart2" runat="server" AutoGenerateColumns="False" GridLines="Vertical" onrowcommand="CartUpdate">
<AlternatingRowStyle BackColor="#CCCCCC" />
<Columns>
<asp:BoundField DataField="Product_Name" HeaderText="Product Name" />
<asp:BoundField DataField="Product_ID" HeaderText="Product ID" />
<asp:BoundField DataField="ItemQTY" HeaderText="ItemQTY" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="IncreaseCartQty" runat="server" CommandArgument="<%#((GridViewRow)Container).RowIndex %>" CommandName="IncreaseCartQty" Text="+" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Price" HeaderText="Price" />
<asp:BoundField DataField="TotalPrice" HeaderText="TotalPrice" />
</Columns>
<FooterStyle BackColor="#CCCCCC" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#808080" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#383838" />
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
グリッドビューには、アイテムの量を増やすためのボタンが 1 つあります。ボタンのコマンド名は"IncreaseCartQty"です。OnRowCommand "CartUpdate"を呼び出そうとしています。しかし問題は、OnRowCommandイベントが発生しないことです。
コードの背後にあるページは次のとおりです。
ページの読み込み時:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["ItemsCount"] != null)
{
CartDT = (DataTable)Session["cart"];
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
}
}
gridview OnRowCommand で呼び出したい関数は次のとおりです。
public void CartUpdate(object sender, GridViewCommandEventArgs e)
{
CartDT = (DataTable)Session["cart"];
if (e.CommandName == "IncreaseCartQty")
{
DataRow DR = CartDT.NewRow();
int rowIndex = Convert.ToInt32(e.CommandArgument.ToString());
int qty = Convert.ToInt32(CartDT.Rows[rowIndex][2].ToString());
DR[0] = CartDT.Rows[rowIndex][0];
DR[1] = CartDT.Rows[rowIndex][1];
DR[2] = ++qty;
DR[3] = CartDT.Rows[rowIndex][3];
DR[4] = qty * double.Parse(CartDT.Rows[rowIndex][3].ToString());
CartDT.Rows.RemoveAt(rowIndex);
CartDT.Rows.InsertAt(DR, rowIndex);
CartDT.AcceptChanges();
Session["cart"] = CartDT;
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
TotalOrderAmt();
TotalItemsCount();
}
}
注文金額とアイテム数を計算する関数は次のとおりです。
public void TotalOrderAmt()
{
double t = 0;
for (int i = 0; i < CartDT.Rows.Count; i++)
{
t = t + double.Parse(CartDT.Rows[i][4].ToString());
}
Session["TotalOrderAmt"] = t;
}
public void TotalItemsCount()
{
double t = 0;
for (int i = 0; i < CartDT.Rows.Count; i++)
{
t = t + double.Parse(CartDT.Rows[i][4].ToString());
}
Session["ItemsCount"] = t;
}
OnRowCommandイベントが発生しない理由がわかりません。グリッドビューでボタンをクリックしても何も起こりません。
正確にどこが間違っているか教えてください。