webForumDet fria alternativet

Dela ett "edit" värde med ett annat värde i en datagrid?

.NET

4 svar · 376 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

har följande lilla kodsnutt

<asp:TextBox ID="txtPriceEdit" runat="server"  Text='<%# DataBinder.Eval(Container, "DataItem.Price", "{0:C}") %>' />

myTemp = CType(e.Item.FindControl("txtPriceEdit"), TextBox).Text

If (IsDBNull(myTemp)) Or (myTemp = "") Or (Not IsNumeric(myTemp)) Then
  myOrderDetailsView.Item(e.Item.ItemIndex).Item("Price") = DBNull.Value
Else
  myPrice = Double.Parse(myTemp, Globalization.NumberStyles.Any)
  myPrice = (myPrice * myQuantity)					      
  myOrderDetailsView.Item(e.Item.ItemIndex).Item("Price") = myPrice
End If

Den skriver ut priset på varje order-rad.

Jag gör som så att användaren ska få skriva in antal och pris per styck så räknar programmet ut totalbeloppet på varje order rad.

Försökte med följande kod

<asp:TextBox ID="txtPriceEdit" runat="server" 
Text='
<%# (DataBinder.Eval(Container, "DataItem.Price", "{0:C}") / DataBinder.Eval(Container, "DataItem.Qty"))  %>
' />

Men det blir ju fel de gånger som ändera qty eller price är tomt (DBNull) Hur ska jag lösa detta på bästa sätt?

Alltså det är att dela Totalpris med Antal i txtPriceEdit jag vill.

Medlem sedan jan. 20022 440 inlägg
#2

Problemet löst :)

Medlem sedan juni 200032 967 inlägg
Medlem sedan jan. 20022 440 inlägg
#4

Hmm, nej jag ger mig inte. Hur kommer jag åt en EditItemTemplate textbox i codebehind?

<asp:TemplateColumn HeaderText="Price">
<HeaderStyle Width="70px" />
	<ItemTemplate>
		<asp:Label ID="lblPriceItem" runat="server" 
			Text='<%# DataBinder.Eval(Container, "DataItem.Price", "{0:C}") %>'
			Width="70px">
		</asp:Label>
	</ItemTemplate>
	<EditItemTemplate>
		<asp:TextBox ID="txtPriceEdit" runat="server" 
			Text='<%# DataBinder.Eval(Container, "DataItem.Price", "{0:C}") %>'
			Width="70px">
		</asp:TextBox>
	</EditItemTemplate>
</asp:TemplateColumn>

Kan man styra vad som händer i editens TextBox genom Code Behind? Hur gör jag så att OM det finns ett värde i lblPriceItem att det delas med Qty?

Medlem sedan jan. 20022 440 inlägg
#5

Det var rätt enkelt, lösningen till på editcommand blir ungefär som jag gjort min updatecommand fast baklänges :)

Private Sub DataGrid1_EditCommand1(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
Dim myQty As Integer = 0
Dim myTemp As String
Dim myPrice As Double = 0

  Select Case Me.txtOrderStatus.Text
  Case Else
	If ValidOrder() Then
	  Me.DataGrid1.EditItemIndex = e.Item.ItemIndex
	  ' Qty
	  myTemp = myOrderDetailsView.Item(e.Item.ItemIndex).Item("Qty").ToString
	  If (Not MyUtils.ValueHasNotBeenSupplied(myTemp)) And (IsNumeric(myTemp)) Then
		myQty = myTemp
	  End If

	  ' Price
	  myTemp = CType(e.Item.FindControl("lblPriceItem"), Label).Text
	  If (Not MyUtils.ValueHasNotBeenSupplied(myTemp)) And (IsNumeric(myTemp)) Then
		' do nothing
	    myPrice = Double.Parse(myTemp, Globalization.NumberStyles.Any)
	    myOrderDetailsView.Item(e.Item.ItemIndex).Item("UnitPrice") = myPrice
	  Else
		myOrderDetailsView.Item(e.Item.ItemIndex).Item("UnitPrice") = DBNull.Value
	  End If
	BindGrid()
	End If
  End Select
End Sub
253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)