我正在尝试获取未绑定数据列的总和。基本上我有一个带有下拉列表和Amount列的gridview。我从该列表中选择数量,价格乘以数量,金额显示在"金额"柱。价格也来自数据库和itemID。现在我想总结一下" Amount"中的所有值。柱。当我运行此代码时,每行都会使用数量和价格乘法成功更新,但总金额逻辑是添加item_price +" amount"中的任何值。柱。我只希望将数据添加到" Amount"柱。我在网格视图的底部有一个标签,我试图获得总结果值。救命!!
aspx文件是这样的:
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server"
OnRowDataBound="GridView1_RowDataBound" ShowFooter="true">
<footerstyle backcolor="LightCyan"
forecolor="MediumBlue"/>
<Columns>
<asp:BoundField DataField="item_ID" HeaderText="ID" />
<asp:TemplateField HeaderText="Quantity">
<ItemTemplate>
<asp:DropDownList ID="ddlQuantity" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlQuantity_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="purchase_price">
<ItemTemplate>
<asp:Label ID="lblPrice" Text='<%#Eval("purchase_price") %>' runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Amount">
<ItemTemplate>
<asp:Label ID="lblAmount" Text="0.00" runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
这是背后的代码:
protected void ddlQuantity_SelectedIndexChanged(object sender, EventArgs e)
{
int quantity;
GridViewRow gvr = ((DropDownList)sender).NamingContainer as GridViewRow;
var ddlQuantity = gvr.FindControl("ddlQuantity") as DropDownList;
var lblAmount = gvr.FindControl("lblAmount") as Label;
var lblPrice = gvr.FindControl("lblPrice") as Label;
int.TryParse(ddlQuantity.SelectedValue, out quantity);
//Label1.Text = quantity.ToString();
int pr = int.Parse(lblPrice.Text);
int qt = int.Parse(ddlQuantity.SelectedValue);
//Label2.Text += (pr*qt).ToString();
lblAmount.Text = (pr * qt).ToString();
int sum = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
sum += int.Parse(lblAmount.Text);
}
Label2.Text = sum.ToString();
}
答案 0 :(得分:0)
你非常接近。在您的总和循环中,您每次只添加相同的金额。在该循环中,您需要查找每个lblAmount(对于该行)并对每个进行求和。
尝试使用此代码进行循环:
int sum = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
gvr = GridView1.Rows[i] as GridViewRow;
var lblRowAmount = gvr.FindControl("lblAmount") as Label;
sum += int.Parse(lblRowAmount.Text);
}
Label2.Text = sum.ToString();