phoenixfire425
asked on
Calculating price in gridview
I am trying to take two values from my gridview and multiply them together to get the extended price on an item.
I have search all around google and the only things i can find are totaling in the Footer.
so basically i want to do this.
unit_price * qty = extended_price
the qty selection is a dropdown box in the gridview.
and i am trying to get the extended_price to display in a asp:Lable
i would like to use the code behind page for this if possible.
I am using Visual Studio Express and i am on 3.5 framework
Thank You
I have search all around google and the only things i can find are totaling in the Footer.
so basically i want to do this.
unit_price * qty = extended_price
the qty selection is a dropdown box in the gridview.
and i am trying to get the extended_price to display in a asp:Lable
i would like to use the code behind page for this if possible.
I am using Visual Studio Express and i am on 3.5 framework
Thank You
on select box use autopostback to true
and write a piece of code on the GridView_RowCommand
and write a piece of code on the GridView_RowCommand
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = ContactsGridView.Rows(index)
dim lbl as Label = row.FindControl("lblExtendedPrice")
lb.Text = Cint(row.cells(1).text) * Cdbl(row.cells(1).text)
ASKER
I am not sure i understand what you are tell me to do with the PageLoad.
I am using VB
I translated the C code you provided to
Dim ddl As DropDownList = CType(GridView1.Rows(e.Row Index).Cel ls(0).Find Control("D ropDownLis t1"), DropDownList)
Dim val As String = ddl.SelectedValue
and its stating that its not correct.
"BC30456: 'RowIndex' is not a member of 'System.Web.UI.WebControls .GridViewR owEventArg s'."
Attached is the GridView Code
I am using VB
I translated the C code you provided to
Dim ddl As DropDownList = CType(GridView1.Rows(e.Row
Dim val As String = ddl.SelectedValue
and its stating that its not correct.
"BC30456: 'RowIndex' is not a member of 'System.Web.UI.WebControls
Attached is the GridView Code
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#DEDFDE"
BorderStyle="None" BorderWidth="1px" CellPadding="4"
ForeColor="Black" GridLines="Vertical" CssClass="style1"
DataKeyNames="item_id" DataMember="DefaultView" ShowFooter="True">
<RowStyle BackColor="#F7F7DE" Font-Size="8pt" />
<Columns>
<asp:BoundField DataField="item_id" HeaderText="Item ID"
SortExpression="item_id" />
<asp:BoundField DataField="unit_of_measure" HeaderText="Unit of Measure"
SortExpression="unit_of_measure" />
<asp:BoundField DataField="item_desc" HeaderText="Item Description"
SortExpression="item_desc" />
<asp:BoundField DataField="Last Order Date" DataFormatString="{0:d}"
HeaderText="Last Invoice Date" SortExpression="Last Order Date" />
<asp:TemplateField HeaderText="Price" SortExpression="unit_price">
<ItemTemplate>
<asp:Label ID="Price" runat="server" Text='<%# Bind("unit_price", "{0:c}") %>'></asp:Label>
<div style="visibility: hidden"><%#GetUnitPrice(Decimal.Parse(Eval("unit_price").ToString())).ToString("N2")%></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("unit_price") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<%#GetTotal().ToString("N2")%>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Qty">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="False"
>
<asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
<asp:ListItem Text="4" Value="4"></asp:ListItem>
<asp:ListItem Text="5" Value="5"></asp:ListItem>
<asp:ListItem Text="6" Value="6"></asp:ListItem>
<asp:ListItem Text="7" Value="7"></asp:ListItem>
<asp:ListItem Text="8" Value="8"></asp:ListItem>
<asp:ListItem Text="9" Value="9"></asp:ListItem>
<asp:ListItem Text="10" Value="10"></asp:ListItem>
<asp:ListItem Text="11" Value="11"></asp:ListItem>
<asp:ListItem Text="12" Value="12"></asp:ListItem>
<asp:ListItem Text="13" Value="13"></asp:ListItem>
<asp:ListItem Text="14" Value="14"></asp:ListItem>
<asp:ListItem Text="15" Value="15"></asp:ListItem>
<asp:ListItem Text="16" Value="16"></asp:ListItem>
<asp:ListItem Text="17" Value="17"></asp:ListItem>
<asp:ListItem Text="18" Value="18"></asp:ListItem>
<asp:ListItem Text="19" Value="19"></asp:ListItem>
<asp:ListItem Text="20" Value="20"></asp:ListItem>
<asp:ListItem Text="21" Value="21"></asp:ListItem>
<asp:ListItem Text="22" Value="22"></asp:ListItem>
<asp:ListItem Text="23" Value="23"></asp:ListItem>
<asp:ListItem Text="24" Value="24"></asp:ListItem>
<asp:ListItem Text="25" Value="25"></asp:ListItem>
<asp:ListItem Text="26" Value="26"></asp:ListItem>
<asp:ListItem Text="27" Value="27"></asp:ListItem>
<asp:ListItem Text="28" Value="28"></asp:ListItem>
<asp:ListItem Text="29" Value="29"></asp:ListItem>
<asp:ListItem Text="30" Value="30"></asp:ListItem>
<asp:ListItem Text="33" Value="31"></asp:ListItem>
<asp:ListItem Text="33" Value="32"></asp:ListItem>
<asp:ListItem Text="33" Value="33"></asp:ListItem>
<asp:ListItem Text="34" Value="34"></asp:ListItem>
<asp:ListItem Text="35" Value="35"></asp:ListItem>
<asp:ListItem Text="36" Value="36"></asp:ListItem>
<asp:ListItem Text="37" Value="37"></asp:ListItem>
<asp:ListItem Text="38" Value="38"></asp:ListItem>
<asp:ListItem Text="39" Value="39"></asp:ListItem>
<asp:ListItem Text="40" Value="40"></asp:ListItem>
<asp:ListItem Text="44" Value="41"></asp:ListItem>
<asp:ListItem Text="44" Value="42"></asp:ListItem>
<asp:ListItem Text="44" Value="44"></asp:ListItem>
<asp:ListItem Text="44" Value="45"></asp:ListItem>
<asp:ListItem Text="45" Value="45"></asp:ListItem>
<asp:ListItem Text="46" Value="46"></asp:ListItem>
<asp:ListItem Text="47" Value="47"></asp:ListItem>
<asp:ListItem Text="48" Value="48"></asp:ListItem>
<asp:ListItem Text="49" Value="49"></asp:ListItem>
<asp:ListItem Text="50" Value="50"></asp:ListItem>
</asp:DropDownList>
<asp:Label runat="server" ID="Qty"></asp:Label>
</ItemTemplate>
<ItemStyle Font-Bold="True" Font-Size="Medium" />
</asp:TemplateField>
<asp:TemplateField HeaderText="txtEstimatedTotal">
<ItemTemplate>
<asp:Label runat="server" ID="Totals"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCC99" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White"
Font-Size="XX-Small" />
<AlternatingRowStyle BackColor="White" Font-Size="XX-Small" />
</asp:GridView>
try this on GridView_RowCommand
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = ContactsGridView.Rows(index)
dim lbl as Label = row.FindControl("lblExtendedPrice")
dim txtPrice as TextBox = row.FindControl("TextBox1").Text
dim lbQty as Listbox = row.FindControl("DropDownList1")
dim qty as int = Cint(lbQty.SelectedValue)
dim price as double = Cdbl(txtPrice.Text)
lb.Text = qty * price
ASKER
This is the error i received.
Exception Details: System.InvalidCastExceptio n: Unable to cast object of type 'System.Web.UI.WebControls .DropDownL ist' to type 'System.Web.UI.WebControls .ListBox'.
Source Error:
Line 131: Dim lbl As Label = row.FindControl("Totals")
Line 132: Dim txtPrice As Label = row.FindControl("Price")
Line 133: Dim lbQty As ListBox = row.FindControl("DropDownL ist1")
Line 134: Dim qty As String = CInt(lbQty.SelectedValue)
Line 135: Dim price As Double = CDbl(txtPrice.Text)
Exception Details: System.InvalidCastExceptio
Source Error:
Line 131: Dim lbl As Label = row.FindControl("Totals")
Line 132: Dim txtPrice As Label = row.FindControl("Price")
Line 133: Dim lbQty As ListBox = row.FindControl("DropDownL
Line 134: Dim qty As String = CInt(lbQty.SelectedValue)
Line 135: Dim price As Double = CDbl(txtPrice.Text)
Dim lbQty As ListBox = row.FindControl("DropDownL ist1")
-->
Dim lbQty As DropDownList = row.FindControl("DropDownL ist1")
-->
Dim lbQty As DropDownList = row.FindControl("DropDownL
ASKER
ok that seems to work for totaling. but is there a way to have that fire when he qty is selected from the dropdown list rather then having to press the Select button?
try
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="False">
-->
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="False">
-->
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
ASKER
I get the postback but it does not send the trigger to execute the GridView1_RowCommand.
Is there a way to make this a trigger for the postback of the Dropdown list?
Is there a way to make this a trigger for the postback of the Dropdown list?
one way is use a custom dropdownlist
http://www.northwestbusinessintelligence.co.uk/technical/tips/100001-aspnet-gridview-rowcommand-event-from-dropdownlist
the other option is using a button next to the select box, setting style="display:none"
and call click event of this button on client side. look at the link firs, if it is something difficult, then we may go with this option...
http://www.northwestbusinessintelligence.co.uk/technical/tips/100001-aspnet-gridview-rowcommand-event-from-dropdownlist
the other option is using a button next to the select box, setting style="display:none"
and call click event of this button on client side. look at the link firs, if it is something difficult, then we may go with this option...
ASKER
I cannot seem to get that to work.
I put the command name in the field. and when it does the postback northing happens.
I put the command name in the field. and when it does the postback northing happens.
<style>
.hidden{display:none}
</style>
...
<asp:Button ID="btnGo" runat="server" Text="Go" CommandName="Go" cssClass="hidden"/>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="False">
...
then loop all dropdownlist and set onChange event
foreach (row as GridViewRow in gv1.Rows)
Dim ddlQty As ListBox = row.FindControl("DropDownL ist1")
ddl.Attributes.Add("onChan ge", "submitQyt(this)");
Next
...
and submitQyt() will be a javascript function
<script>
function submitQyt(dd){
dd.ParentNode.getElementsB yTagName(" BUTTON")[0 ].click();
}
<script>
hope it is clear and works ;)
.hidden{display:none}
</style>
...
<asp:Button ID="btnGo" runat="server" Text="Go" CommandName="Go" cssClass="hidden"/>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="False">
...
then loop all dropdownlist and set onChange event
foreach (row as GridViewRow in gv1.Rows)
Dim ddlQty As ListBox = row.FindControl("DropDownL
ddl.Attributes.Add("onChan
Next
...
and submitQyt() will be a javascript function
<script>
function submitQyt(dd){
dd.ParentNode.getElementsB
}
<script>
hope it is clear and works ;)
ASKER
I cannot seem to get this to work.. i guess i dont understand this very well on howto set that up.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Well it looks like this might work if i can get this issue resolved!
Compiler Error Message: BC30456: 'CommandArgument' is not a member of 'System.EventArgs'.
Source Error:
Line 136: Dim ddlCurrent As DropDownList = sender
Line 137: Dim grdRow As GridViewRow = ddlCurrentDropDownList.Par ent.Parent
Line 138: Dim index As Integer = Convert.ToInt32(e.CommandA rgument) <----- here is the issue
Line 139: Dim row As GridViewRow = GridView1.Rows(index)
Line 140: Dim lbl As Label = row.FindControl("Totals")
Compiler Error Message: BC30456: 'CommandArgument' is not a member of 'System.EventArgs'.
Source Error:
Line 136: Dim ddlCurrent As DropDownList = sender
Line 137: Dim grdRow As GridViewRow = ddlCurrentDropDownList.Par
Line 138: Dim index As Integer = Convert.ToInt32(e.CommandA
Line 139: Dim row As GridViewRow = GridView1.Rows(index)
Line 140: Dim lbl As Label = row.FindControl("Totals")
Protected Sub ddlDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim ddlCurrentDropDownList As DropDownList = CType(sender, DropDownList)
Dim grdrDropDownRow As GridViewRow = (CType(ddlCurrentDropDownList.Parent.Parent, GridViewRow))
Dim lblCurrentStatus As Label = CType(grdrDropDownRow.FindControl("lblOrderStatus"), Label)
If Not lblCurrentStatus Is Nothing Then
lblCurrentStatus.Text = ddlCurrentDropDownList.SelectedItem.Text
Dim ddlCurrent As DropDownList = sender
Dim grdRow As GridViewRow = ddlCurrentDropDownList.Parent.Parent
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = GridView1.Rows(index)
Dim lbl As Label = row.FindControl("Totals")
Dim txtPrice As Label = row.FindControl("Price")
Dim lbQty As DropDownList = row.FindControl("DropDownList1")
Dim qty As String = CInt(lbQty.SelectedValue)
Dim price As Double = CDbl(txtPrice.Text)
lbl.Text = qty * price
End If
End Sub
ASKER
Well i was able to get it to work. but i am not sure if it is the correct / best way or not.
Protected Sub ddlDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ddlCurrentDropDownList As DropDownList = CType(sender, DropDownList)
Dim grdrDropDownRow As GridViewRow = (CType(ddlCurrentDropDownList.Parent.Parent, GridViewRow))
Dim lblCurrentStatus As Label = CType(grdrDropDownRow.FindControl("lblOrderStatus"), Label)
If Not lblCurrentStatus Is Nothing Then
lblCurrentStatus.Text = ddlCurrentDropDownList.SelectedItem.Text
Dim ddlCurrent As DropDownList = sender
'try to get the rox index
Dim grdRow As GridViewRow = ddlCurrentDropDownList.Parent.Parent
Dim Row As GridViewRow = CType(CType(sender, Control).Parent.Parent, _
GridViewRow)
'end
Dim index As Integer = Row.RowIndex
Dim lbl As Label = row.FindControl("Totals")
Dim txtPrice As Label = row.FindControl("Price")
Dim lbQty As DropDownList = row.FindControl("ddlDropDownList")
Dim qty As String = CInt(lbQty.SelectedValue)
Dim price As Double = CDbl(txtPrice.Text)
lbl.Text = qty * price
End If
End Sub
ASKER
Lastly I guess before i accept this as a solution.. Is there a way to give a total in the footer for this column??
DropDownList ddl = (DropDownList)GridView1.Ro
string val = ddl.SelectedValue;