他
我正在使用带有SQL-Server-2012的ASP.NET / VB.NET。
我有一个GridView列,包含3个字段和1个模板字段,如下所示:
<asp:GridView ID="grdItems" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource3" Font-Names="Tahoma" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="item_name" HeaderText="Item" SortExpression="item_name" />
<asp:BoundField DataField="item_cost" HeaderText="Cost (inc. VAT)" SortExpression="item_cost" />
<asp:BoundField DataField="item_quantity" HeaderText="Quantity" SortExpression="item_quantity" />
<asp:TemplateField HeaderText="Sub-Total (inc. VAT)">
<ItemTemplate>
<asp:Label ID="TextBox3" runat="server" Text='<%# Convert.ToInt32(Eval("item_quantity")) * Convert.ToDouble(Eval("item_cost"))%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<FooterTemplate>
<asp:Label ID="lblTotalPrice" runat="server" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" VerticalAlign="Middle" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Center" VerticalAlign="Middle" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
代码背后:
Imports System.Data.SqlClient
Imports System.Data
Partial Class ProjectReport
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim ProjectID = Session("project_id")
Session("ProjectID") = ProjectID
End Sub
Protected Sub grdItems_RowDataBound(sender As Object, e As GridViewRowEventArgs)
Dim totalPrice As Decimal = 0
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lblPrice As Label = DirectCast(e.Row.FindControl("lblTotalPrice"), Label)
Dim price As Decimal = [Decimal].Parse(lblPrice.Text)
totalPrice += price
End If
If e.Row.RowType = DataControlRowType.Footer Then
Dim lblTotalPrice As Label = DirectCast(e.Row.FindControl("lblTotalPrice"), Label)
lblTotalPrice.Text = totalPrice.ToString()
End If
End Sub
End Class
数据绑定()
Private Sub BindData()
Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
Dim query As New SqlCommand("SELECT Items.item_name, Items.item_cost, project_items.item_quantity FROM Items INNER JOIN project_items ON items.item_id = project_items.item_id WHERE project_items.project_id = @parameter", conn)
query.Parameters.AddWithValue("@UserID", Session("ProjectID"))
Dim da As New SqlDataAdapter(query, conn)
da.SelectCommand = query
Dim table As New DataTable()
da.Fill(table)
grdItems.DataSource = table
grdItems.DataBind()
End Sub
最后一列(模板字段)将数量字段与成本字段相乘。
如何在模板字段中计算所有值(通过添加)?
答案 0 :(得分:1)
您必须使用数据绑定事件对值进行求和。请参阅this example并根据您的需求进行调整:
private Decimal OrderTotal;
protected void GridView1_DataBinding(object sender, EventArgs e)
{
OrderTotal = 0.0M;
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Keep adding the subtotal here
OrderTotal += Subtotal;
}
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
//Set a control with the total sum
LabelOrderTotal.Text = OrderTotal.ToString("C");
}
基本上,您一直在RowDataBound
事件中添加值,并在DataBound
事件中添加总和的标签。或者,您可以在DataBound
事件中迭代网格并添加所有内容。
答案 1 :(得分:0)
我个人会通过在RowDataBound事件中执行添加(以及实际的乘法)来实现...
答案 2 :(得分:0)
迭代gridview的DataRow
事件中的所有DataBound
行,并将TextBox3的值添加到正在运行的总变量中。
Protected Sub grdItems_DataBound(ByVal sender as Object, ByVal e as EventArgs)
Dim row As GridViewRow = Nothing
Dim runningTotal As Double = 0.0
For i As Integer = 0 to grdItems.Rows.Count
row = grdItems.Rows(i)
If row.RowType = DataControlRowType.DataRow Then
' Add error handling here
runningTotal += Ctype(CType(row.FindControl("TextBox3"), Label).Text, Double)
End If
Next i
End Sub
答案 3 :(得分:0)
你可以试试这个......
decimal totalScore=0;
protected void gd__RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label TextBox3= (Label)e.Row.FindControl("TextBox3");
decimal points = Decimal.Parse(TextBox3.Text);
totalScore += points;
}
if (e.Row.RowType == DataControlRowType.Footer)
{
Label lblTotal = (Label)e.Row.FindControl("lblTotal");
lblTotal.Text = totalScore.ToString();
}
}
答案 4 :(得分:0)
<asp:TemplateField HeaderText="first_name" SortExpression="first_name">
<EditItemTemplate>
<asp:TextBox ID="TextBox_first_name" runat="server" Text='<%# Bind("first_name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label_first_name" runat="server" Text='<%# Bind("first_name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="middle_name" SortExpression="middle_name">
<EditItemTemplate>
<asp:TextBox ID="TextBox_middle_name" runat="server" Text='<%# Bind("middle_name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label_middle_name" runat="server" Text='<%# Bind("middle_name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="last_name" SortExpression="last_name">
<EditItemTemplate>
<asp:TextBox ID="TextBox_last_name" runat="server" Text='<%# Bind("last_name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label_last_name" runat="server" Text='<%# Bind("last_name") %>'></asp:Label>
</ItemTemplate>
Protected Sub GridView_clients_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GridView_clients.RowCommand
If e.CommandName = "Select" Then
Dim index As Integer = Convert.ToInt32(e.CommandArgument) 'gets the row
'........................................
Dim client_first_name As String = DirectCast(GridView_clients.Rows(index).FindControl("Label_first_name"), Label).Text.ToString
Dim client_middle_name As String = DirectCast(GridView_clients.Rows(index).FindControl("Label_middle_name"), Label).Text.ToString
Dim client_last_name As String = DirectCast(GridView_clients.Rows(index).FindControl("Label_last_name"), Label).Text.ToString
'MsgBox(client_first_name)
'MsgBox(client_middle_name)
'MsgBox(client_last_name)
lb_test.Text = client_first_name & " " & client_middle_name & " " & client_last_name
End If
End Sub
来自FSSA的Craig Lewis Johnson - 印第安纳州