Lägg in en funktion
Function CheckIfEmpty(x as string) as string
if x = "" then
return "Buu"
else
return "Wee"
end if
end Function
---- datalist ---
<%# CheckIfEmpty(container.dataitem("Productname")) %>
16 svar · 473 visningar · startad av Arne
Jag har en datalist jag vill köra en if sats i, men får problem. Jag vill kolla om #DataBinder.Eval(Container.DataItem, "ProductName") innehåller ett värde i en if sats.
I gamla asp gjorde jag så här:
<% If RS("ProductName") <> "" Then %> Text här <%Else %>Ny text här<% End If %>
Går det att göra något liknande i en datalist??
Lägg in en funktion
Function CheckIfEmpty(x as string) as string
if x = "" then
return "Buu"
else
return "Wee"
end if
end Function
---- datalist ---
<%# CheckIfEmpty(container.dataitem("Productname")) %>
DBNull
Ett litet problem dök upp.
Om jag hämtar från till exempel ett datum fält i sql databasen så har det värdet <NULL>, då får jag felmeddelandet:
Exception Details: System.InvalidCastException: Cast from type 'DBNull' to type 'String' is not valid.
Jag har provat få till det med det vills sig inte, går det att komma runt?
if container.dataitem("Productname").GetType().ToString() = "System.DBNull" then
return "Buu"
else
return "Wee"
end if
I stället för att köra .GetType().ToString() har jag för mig att man kan köra med
if (container.dataitem("Productname") is System.DBNull)
declarera
Hmmm, Compiler Error Message: BC30451: Name 'Container' is not declared.
Jag provade Dim Container As String men det var ingen höjdare...
Hur göra här? (ursäkta dumma frågor;-)
Mer kod tack, med verkar som om du försöker komma åt container objectet i någon funktion vilket inte fungerar, conatiner fungerar bara i t.ex en datalist eller datagrid och skall inte declareras
Kommer här
<ItemTemplate>
<table width="100%" cellspacing="0" cellpadding="2" align="center">
<tr>
<td width="71%"><small><b><%# DataBinder.Eval(Container.DataItem, "namn")%>,</b> <%# DataBinder.Eval(Container.DataItem, "ort")%></small></td>
<td width="7%" align="center"><a href="kedit1.asp?medlemsid=<%# DataBinder.Eval(Container.DataItem, "medlemsid")%>&annons=<%# DataBinder.Eval(Container.DataItem, "id")%>" onClick="window.open(this.href,'myWin','height=360,width=450,resizable,scrollbars,'); return false;"><img src="../picture/edit.gif" width="15" height="16" border="0" alt="Redigera <%# DataBinder.Eval(Container.DataItem, "namn")%>s inlägg"></a></td>
<td width="7%" align="center"><a href="mailto:<%# DataBinder.Eval(Container.DataItem, "epost")%>"><img src="../picture/email.gif" width="16" height="15" border="0" alt="Skicka e-post till <%# DataBinder.Eval(Container.DataItem, "namn")%>"></a></td>
<td width="15%" align="center"><small><%# DataBinder.Eval(Container.DataItem, "formdatum")%></small></td>
</tr>
<tr>
<td width="71%"><small><img src="../picture/tel.gif" width="15" height="12" alt="Ring till annonsören">
<%# DataBinder.Eval(Container.DataItem, "telefon")%>, <%# DataBinder.Eval(Container.DataItem, "mobil")%></small></td>
<td colspan="3" align="right">
Och här är strängen som strular:
<% If container.dataitem("datum1").GetType().ToString() = "System.DBNull" then %>Text här <%Else %>Ny text här<% End If %>
</td>
</tr>
<tr>
<td colspan="4"><%# ConvertLinks(radbryt(DataBinder.Eval(Container.DataItem, "annons"))) %></td>
</tr>
</table>
</ItemTemplate>
Om du behöver mer kod kan jag maila dokumentet till dig..........
Kan vara så att den är känslig för stora och små bokstäver, testa med Container.DataItem i stället för container.dataitem.
En chansning, ska det inte vara "is" i vb?
<% If container.dataitem("datum1").GetType().ToString() [b]IS[/b] "System.DBNull" then %>Text här <%Else %>Ny text här<% End If %>
Jag har sagt det förut och jag säger det igen, ha aldrig den här typen av logik i presenationslagret. Gör en funktion som tar in värdet och som sedan returnerar det önskade resultatet istället! :)
Function
Svara gärna varför för en okunnig så jag blir en erfarenhet rikare, och hur skulle den funktionen se ut?
cyprys Function CheckIfEmpty fungerar kanon, men inte om jag har <Null> i sql databasen
function check(grr as string) as string
if grr = "" then
return "Nä nu jävlar"
else
return grr
end if
end function
------------------------
<%# check(Container.DataItem("datum").tostring()) %>
ds.tables(0).rows(0)("lala") Is DbNull and
ds.tables(0).rows(0)("lala") = ""
Then osv ....
nånting sådant fungerar om du kör med dataset.
Om du inte vill använda den fula data binding containers koden så kan du använda denna kod istället.
private sub repTest_itemDatabound(byval sender as object, byval e as repeateritemeventargs)
select case e.item.itemtype
case listitemtype.item, listitemtype.alternatingitem
dim drv as DataRowView
drv = DirectCast(e.item.dataitem, DataRowView )
dim strName as string = drv("g_name").tostring
dim lc as new literal()
if strName = "" then
lc.text = " - " & "----------Ingen data----------- -"
else
lc.text = " - " & strName
end if
CType(e.item.Findcontrol("phTest"), placeholder).controls.add(lc)
end select
end sub
-----------------------
<asp:Repeater id="repTest" runat="server" OnItemDataBound="repTest_itemDatabound">
<ItemTemplate>
<tr>
<td>
<asp:PlaceHolder id="phTest" runat="server"/>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
Äntligen
Det var <%# check(Container.DataItem("datum").tostring()) %> som löste det hela med Null värdet. Det som skulle läggas till var .tostring()
Tack för hjälpen....