Ska räkna ut värdet från flera olika funktioner där jag skickar ett värde till funktionen. <code> Så här ser det ut, allt ligger i en datalist Detta ser ut som lite av ett mishmash mellan Classic Asp o Asp.Net. Har du 10 olika funktioner, eller hur har du tänkt här? Hur ser ser dom här funktionerna ut? vad är det egentligen du vill göra? Ja, det är till och med 11 olika funktioner. Det ska vara en statistiksida. En typisk funktion ser ut: Vad är skillnaden på funktionerna? Kan du inte använda 1 funktion och differentiera anropet baserat på en extra parameter (en enum eller integer t.ex.) Varför returnerar du ett objekt? Kan värdet vara NULL? Isåfall, varför inte hantera detta i funktionen och returnera '0'? Sorry, men detta verkar ärligt talat inte helt genomtänkt tycker jag... (Skall det vara Datum1 i alla poster i DataListen?) Heh, så sant, det är genomtänkt med en som inte är så bra på det här än (man lär sig). Skillnaderna i funktionerna ligger i kolumnen kategori, annars är de identiska. Värdet kan vara NULL, därför returnerade jag ett object. Men förslag på förändringar/förbättringar mottages tacksamt. Differentiera kan du t.ex göra genom att ge din funktion en annan signatur, typ: Ok, men den returnerar ett int-värde istället för object? Hur blir det då om jag ska ta minus på de olika villkoren? Du uttrycker dig inte särskilt begripligt tycker jag. Vad tänkte du göra med nullvärdet? Du räknar ju förekomsten av ett visst antal poster 'kategori'. Egentligen behöver du inte ens checka NULL eftersom 'antal' antigen blir '0' eller ett positivt värde. Och '0' minus t.ex. '4' = '-4'. Ok, ska försöka förklara på ett annat sätt, tar hela bilden. Varför gör du inte detta i SQL Satsen? Exempel Hasse, Hej alla! Jag har provat nu och tack vare koden ovan hjälpte den på ett annat ställe. Tyvärr är det en count och sum som skulle behövas här. Något liknande detta skulle det behöva se ut:Kalkylering
<code>
<% Dim kk As Integer = raknaSvar(DataBinder.Eval(Container, "DataItem.datum1")) - raknaSvar4(DataBinder.Eval(Container, "DataItem.datum1")) %>
</code>
Tyvärr får jag felmeddelande: Namnet Container har inte deklarerats.
Någon som vet hur man gör det korrekt?Sv: Kalkylering
DataBinder.Eval(Container.DataItem, "datum1")
</code>
eller
<code>
Container.DataItem( "datum1" )
</code>
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Kalkylering
<code>
<table style="COLOR: black; BACKGROUND-COLOR: lightgrey" bordercolor="black">
<tbody>
<tr>
<td style="BACKGROUND-COLOR: silver" width="90">
<asp:Label id="lblDatum1" runat="server" font-size="XX-Small" text='<%# DataBinder.Eval(Container, "DataItem.datum1") %>'></asp:Label></td>
<% Dim kk As Integer = raknaSvar(Container.DataItem("datum1")) - raknaSvar4(Container.DataItem("datum1")) %>
<td width="50"><% =kk %></td>
<td width="120">
<%# raknaSvar(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="170">
<%# raknaSvar2(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="120">
<%# raknaSvar3(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="120">
<%# raknaSvar4(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="50">
<%# raknaSvar11(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="90">
<%# raknaSvar5(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="130">
<%# raknaSvar6(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="120">
<%# raknaSvar7(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="90">
<%# raknaSvar8(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="50">
<%# raknaSvar9(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="50">
<%# raknaSvar10(DataBinder.Eval(Container, "DataItem.datum1")) %></td>
<td width="70"></td>
</tr>
</tbody>
</table>
</code>
Det är uträkningen som inte fungerar, allt annat fungerar.Sv: Kalkylering
Sv: Kalkylering
<code>
Function raknaSvar(datum1 As String)
Dim id As String = Request.QueryString("id")
Dim connectionString As String = "server='(local)'; trusted_connection=true; Database='TM'"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString As String = "SELECT COUNT([kategori]) FROM [stat] WHERE (([stat].[kategori] = 'M') AND ([stat].[datum1] = @Datum) AND ([stat].[docno] = @Id))"
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlCommand.Parameters.Add("@Datum", System.Data.SqlDbType.VarChar).Value = datum1
sqlCommand.Parameters.Add("@Id", System.Data.SqlDbType.VarChar).Value = id
sqlConnection.Open
Dim antal As Object = sqlCommand.ExecuteScalar()
sqlConnection.Close
Return antal
End Function
</code>
Alla uträkningar direkt från funktionen fungerar nu, men sen vill jag lägga ihop eller dra ifrån olika funktioner med varandra och skriva ut. Det är just det jag inte får att fungera.Sv: Kalkylering
Sv: Kalkylering
Hur man differentierar vet jag tyvärr inte hur man gör, och sen har villkoren från uppdragsgivaren ändrats hela tiden :(Sv: Kalkylering
<code>
Public Function RaknaSvar(ByVal datum As String, ByVal cat As Integer) As Integer
.
.
.
Dim antal As Object = sqlCommand.ExecuteScalar()
Con.Close()
Dim intRval As Int32
If IsDBNull(antal) Then
intRval = 0
Else
intRval = Ctype(antal, int32)
End IF
Return intRval
End Function
</code>
Sedan är ju detta typiskt något som du skulle kunna köra i metoden ItemDataBound.Sv: Kalkylering
Det är ju så att det läggs in en kategori från en radiobuttonlist med värde från A-M. Det som är bl.a. att jag ska ha en minus där antal A - antal D.Sv: Kalkylering
Sv: Kalkylering
Man får in en textfil med information man importerar till en databas. Utifrån den databasen hämtar man in kundinformation och man arbetar med den. Beroende på händelse så tilldelas då varje kund en kategori bl.a. som sparas i databasen. Datumet när man jobbade med kunden sparas även in i db. Allt detta sker i andra filer och fungerar numera utmärkt. Nu ska det göras en statistiksida. Dels är det antalet av de olika kategorierna man vill kunna se, och det är efter datum när man jobbade med kunden, ex:
Datum Kat A Kat B katC Summa kat A + Kat B + Kat C
------------------------------------------------------------------------------------
2004-05-21 8 5 6 19
Det är summan jag nu vill få fram, och det är den som är problemet.Sv: Kalkylering
SELECT OrderID AS Val1, EmployeeID As Val2, ShipVia As Val3, SUM(OrderID + EmployeeID + ShipVia) AS Total
FROM Orders
WHERE OrderDate = '1996-07-04'
GROUP BY OrderID, EmployeeID, ShipVia
Detta ger (i mitt exempel):
Val1 Val2 Val3 Total
----------------------------------------------
10248 5 3 10256
Du förstår principen
Sv: Kalkylering
Löste ditt problem sig eller behöver du mer hjälp? Om du är klar med detta problemet så markera inlägget som antingen <b>löst</b> (om du hittat en lösning - skriva gärna vad den var så andra kan ta del av både fråga och svar) eller <b>stängd</b> (om du inte hittat en lösning men problemet inte är aktuellt längre).
Om du inte löst problemet och vill ha mer hjälp så skriv ett inlägg som beskriver var du står idag med problemet (vad du har provat etc) så skall vi se om vi inte kan hitta en lösning.
//AndreasSv: Kalkylering
Jag är jätteglad för tipset och jag tror jag förstår vad adec menar. Tyvärr har jag inte tillgång till filerna förrän på måndag, så att jag kan testa. Men jag lovar att så fort jag har testat, så ska jag ge feedback. Som jag sagt innan, ni alla är fantastiska. Tack vare er kan man flyta och kippa efter luft.
Hoppas ni får en underbar helg så länge.Sv: Kalkylering
<code>
Function raknaSvar40(datum1 As String)
Dim id As String = Request.QueryString("id")
Dim connectionString As String = "server='(local)'; trusted_connection=true; Database='TM'"
Dim sqlConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString As String = "SELECT COUNT([kategori]) FROM [stat] WHERE (([stat].[kategori] = 'B') AND ([stat].[datum1] = @Datum) AND ([stat].[docno] = @Id)) As summa1, COUNT([kategori]) FROM [stat] WHERE (([stat].[kategori] = 'C') AND ([stat].[datum1] = @Datum) AND ([stat].[docno] = @Id)) As summa2 SUM(summa1 - summa2) "
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(queryString, sqlConnection)
sqlCommand.Parameters.Add("@Id", System.Data.SqlDbType.VarChar).Value = id
sqlCommand.Parameters.Add("@Datum", System.Data.SqlDbType.VarChar).Value = datum1
sqlConnection.Open
Dim antal As Object = sqlCommand.ExecuteScalar()
sqlConnection.Close
Return antal
End Function
</code>
Självklart fungerar inte den koden, men tänket bakom.