Först undrar jag hur man gör den här funktionen på bästa sätt i asp.net, nu är det i vanlig asp. Otestat hjälpfunktion: Okej, är ny på det här. Hur skrivs funktionen ut i sidan, är det genom asp:label? Hur definerar man objEmail variabeln så att den hör ihop till databasen? Detta kan bero lite på hur du hämtar datat från databasen och till vilken typ av kontroll du skall binda till. En DataGrid t.ex. använder du exempelvis ItemDataBound metoden. Exempel Okej, hur gör man då i den här koden? Du får skilja på metod för att hämta data, och metod för att behandla data när du väl har hämtat datat från databasen. Vad skall du göra med din DataTable? Skall du använda den för att fylla en DataGrid kontroll? Jag har en gästbok, där om man har en email infylld så får man en bild. Ingen email en annan bild. Då använder du dig av av Repeaterkontrollens OnItemDataBound event: Ett annat sätt är att skapa ett dataset och sedan loopa igenom alla rader i det och skriva ut html-kod till en label. får det här felmeddelandet Problemet här är att man aldrig riktigt vet om folk kör Code behind, inline code, C# eller VB.Net. Eftersom du kör med VB.Net CodeBehind skriver du din kod så här (kan du verkligen döpa din Repeater till 'main'?!?!?!?!?! - döp om) Ojoj -- Jag ser att du dessutom kör ItemDataBound inne i en Function. Det går förstås inte -- flytta ut hela metoden, den skall stå separat:: Okej har ändrat nu, som sagt är jag ny på det här, så det blir en del frågor. Varför kan den inte heta main? Ah, den borde du kunna lista ut själv: Nu har jag ändrat lite ytterligare i koden, löst några felmeddelanden. Har bytt namn från main till sida, jag var även tvungen att ta bort "private sub" och ersätta det med sub. Hmm, hur ska man definera det då? Ska du inte lägga objektet direkt på webbsidan? Nej nej nej nej. Du skall helt enkelt ha en Label i di repeater (i ItemTemplate). Ge den ett ID (jag har kallat den 'myLabelInGrid' i min kod) och använd det ID i FindControl. Detta är något av det mest basala att kunna i Asp.Net. felet var att jag hade missat att döpa lable-fältet till myLabelInGrid, det hette lbl. Nu funkar det, tack för hjälpen!Några små frågor angånde asp.net!
<code>
If Len(RecSet("epost")) > 0 Then
Response.Write "<IMG SRC='epost.jpg'>"
else
Response.Write "<IMG SRC='ingen_epost.jpg'>"
End if
</code>
Kan man kolla det på nått sätt i code-behind, sedan skriver ut det på sidan?
Vilket är det bästa sättet att lösa det på?
Sedan undrar jag hur datumen ser ut, finns det någon sida där det tar upp hur man ska skriva för att få en annan datumform?Sv: Några små frågor angånde asp.net!
<code>
Public Function CheckLen(ByVal objEmail As Object) As String
If IsDbNull(objEmail) Then
Return "<IMG SRC='ingen_epost.jpg'>"
ElseIf objEmail.ToString.Length = 0 Then
Return "<IMG SRC='ingen_epost.jpg'>"
Else
Return "<IMG SRC='epost.jpg'>"
End If
End Function
</code>
Datum kan t.ex. formatteras så här:
<code>
String.Format("{0:d}", DateTime.Now)
</code>Sv: Några små frågor angånde asp.net!
<code>
objEmail = Container.DataItem("email")
</code>?Sv: Några små frågor angånde asp.net!
<code>
Public Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj)Then
Return "<IMG SRC='ingen_epost.jpg'>"
ElseIf obj.ToString.Length = 0 Then
Return "<IMG SRC='ingen_epost.jpg'>"
Else
Return "<IMG SRC='epost.jpg'>"
End If
End Select
End Sub
</code>
Nåt sånt...Sv: Några små frågor angånde asp.net!
Function getData() As DataTable
Dim SQL As string = "SELECT name, email, message FROM tbl_gb ORDER BY Id"
Dim ds As new DataSet()
Dim CnStr As string = "Provider=Microsoft.Jet.OleDb.4.0; data source=" & Server.MapPath("../db/db.mdb")
Dim Cn As new OleDbConnection(CnStr)
'skapa en OleDbDataAdapter och fyll Datasetet
Dim ODA As new OleDbDataAdapter(SQL, Cn)
ODA.Fill(ds, "tbl_gb")
Return ds.Tables("tbl_gb").Copy
ODA.Dispose()
End Function
Blir det så här?
<code>
Function getData() As DataTable
Dim SQL As string = "SELECT name, email, message FROM tbl_gb ORDER BY Id"
Dim ds As new DataSet()
Dim CnStr As string = "Provider=Microsoft.Jet.OleDb.4.0; data source=" & Server.MapPath("../db/db.mdb")
Dim Cn As new OleDbConnection(CnStr)
'skapa en OleDbDataAdapter och fyll Datasetet
Dim ODA As new OleDbDataAdapter(SQL, Cn)
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj)Then
Return "<IMG SRC='ingen_epost.jpg'>"
ElseIf obj.ToString.Length = 0 Then
Return "<IMG SRC='ingen_epost.jpg'>"
Else
Return "<IMG SRC='epost.jpg'>"
End If
End Select
ODA.Fill(ds, "tbl_gb")
Return ds.Tables("tbl_gb").Copy
ODA.Dispose()
End Function
</code>
Var ska man sätta ut dem, och behöver man ändra något i koden när man använder repeater?
Sv: Några små frågor angånde asp.net!
Sv: Några små frågor angånde asp.net!
Det är i en repeater som all data visas i på html-sidan. Sv: Några små frågor angånde asp.net!
<code>
<asp:Repeater id="myRepeater" runat="server" OnItemDataBound="myRepeater_ItemDataBound" ......
</code>
Metoden ser ut så här:
<code>
Public Sub myRepeater_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj)Then
Return "<IMG SRC='ingen_epost.jpg'>"
ElseIf obj.ToString.Length = 0 Then
Return "<IMG SRC='ingen_epost.jpg'>"
Else
Return "<IMG SRC='epost.jpg'>"
End If
End Select
End Sub
</code>Sv: Några små frågor angånde asp.net!
mvh /xaphodSv: Några små frågor angånde asp.net!
"Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: BC30289: Statement cannot appear within a method body. End of method assumed.
Source Error:
Line 49: 'email-kontrollen
Line 50:
Line 51: Public Sub myRepeater_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
Line 52: Dim item As ListItemType = e.Item.ItemType
Line 53: Dim lbl As Label
Source File: c:\inetpub\wwwroot\personlig\gb\gb.VB Line: 51 "
du kan se all kod här: http://www.aspsidan.se/code/?c=923Sv: Några små frågor angånde asp.net!
<code>
Private Sub main_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles main.ItemDataBound
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj)Then
Return "<IMG SRC='ingen_epost.jpg'>"
ElseIf obj.ToString.Length = 0 Then
Return "<IMG SRC='ingen_epost.jpg'>"
Else
Return "<IMG SRC='epost.jpg'>"
End If
End Select
End Sub
</code>Sv: Några små frågor angånde asp.net!
Fick det här felmeddelandet
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: BC30647: 'Return' statement in a Sub or a Set cannot return a value.
Source Error:
Line 67:
Line 68: If IsDbNull(obj)Then
Line 69: Return "<IMG SRC='ingen_epost.jpg'>"
Line 70: ElseIf obj.ToString.Length = 0 Then
Line 71: Return "<IMG SRC='ingen_epost.jpg'>"
Source File: c:\inetpub\wwwroot\personlig\gb\gb.VB Line: 69 Sv: Några små frågor angånde asp.net!
<code>
Private Sub main_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles main.ItemDataBound
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj) OrElse obj.ToString.Length = 0 Then
lbl.Text = "<IMG SRC='ingen_epost.jpg'>"
Else
lbl.Text = "<IMG SRC='epost.jpg'>"
End If
End Select
End Sub
</code>
'Main' är ett reserverat ord i många programmeringsspråk och används i speciella sammanhang. Undvik därför.
Annars vill jag få rekommendera "Asp.Net Unleashed" av Stephen Walther, en mycket bra bok att lära sig grunderna från.Sv: Några små frågor angånde asp.net!
Här är en del av min kod:
<code>
Function getData() As DataTable
'variabler fr SQL-satsen, ett DataSet, anslutningenstrngen till databasen, samt anslutningen till databasen
Dim SQL As string = "SELECT name, email, message FROM tbl_gb ORDER BY Id"
Dim ds As new DataSet()
Dim CnStr As string = "Provider=Microsoft.Jet.OleDb.4.0; data source=" & Server.MapPath("../db/db.mdb")
Dim Cn As new OleDbConnection(CnStr)
'skapa en OleDbDataAdapter och fyll Datasetet
Dim ODA As new OleDbDataAdapter(SQL, Cn)
ODA.Fill(ds, "tbl_gb")
Return ds.Tables("tbl_gb").Copy
'frigr resurser anvnda av OleDbDataAdaptern
ODA.Dispose()
End Function
Sub sida_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles sida.ItemDataBound
Dim item As ListItemType = e.Item.ItemType
Dim lbl As Label
Dim obj As Object
Select Case item
Case ListItemType.Item, ListItemType.AlternatingItem
obj = e.Item.DataItem("Email")
lbl = CType(e.Item.FindControl("myLabelInGrid"), Label)
If IsDbNull(obj) OrElse obj.ToString.Length = 0 Then
lbl.Text = "<IMG SRC='ingen_epost.jpg'>"
Else
lbl.Text = "<IMG SRC='epost.jpg'>"
End If
End Select
End Sub
</code>
Här är mitt felmeddelande
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 72:
Line 73: If IsDbNull(obj) OrElse obj.ToString.Length = 0 Then
Line 74: lbl.Text = "<IMG SRC='ingen_epost.jpg'>"
Line 75: Else
Line 76: lbl.Text = "<IMG SRC='epost.jpg'>"
Source File: c:\inetpub\wwwroot\personlig\gb\gb.VB Line: 74
Vad beror det på?
Nu stängs ju databasen innan den kör den här snutten obj = e.Item.DataItem("Email"), hur ska man göra så att de stängs efteråt, den måste väl göra det? Sv: Några små frågor angånde asp.net!
"Dim lbl As Label" Definerar inte det, så att lbl blir Label. Går inte att ha
Dim lbl As Label
Dim lbl As Object
Vad ska man ändra? Sv: Några små frågor angånde asp.net!
Annars deklarerar du den så här:
Dim lbl as New Label()
eller
Dim lbl as Label
lbl = New Label()Sv: Några små frågor angånde asp.net!
Sv: Några små frågor angånde asp.net!
Bara en fråga kvar nu, om man tex vill ha samma funktion fast det är till en hemsida. Hur gör man då för att ha två funktioner på ett bra sätt?
Är det bara att köra kopiera Select Case item... fast sedan ändra namn på de olika objekten?