webForumDet fria alternativet

If sats i datalist?

.NET

16 svar · 473 visningar · startad av Arne

Medlem sedan maj 2000267 inlägg
Frågan#1

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??

Medlem sedan dec. 20003 563 inlägg
#2

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")) %>
Medlem sedan maj 2000267 inlägg
#3

Tackar

Fungerar exakt som jag tänkt mig.............

Medlem sedan maj 2000267 inlägg
#4

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?

Medlem sedan dec. 20003 563 inlägg
#5
if container.dataitem("Productname").GetType().ToString() = "System.DBNull" then
return "Buu"
else
return "Wee"
end if
Medlem sedan apr. 20012 266 inlägg
#6

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)
Medlem sedan maj 2000267 inlägg
#7

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;-)

Medlem sedan apr. 20012 266 inlägg
#8

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

Medlem sedan maj 2000267 inlägg
#9

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&auml;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&ouml;ren">&nbsp;    
      <%# DataBinder.Eval(Container.DataItem, "telefon")%>,&nbsp; <%# 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..........

Medlem sedan apr. 20012 266 inlägg
#10

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.

Medlem sedan maj 2000267 inlägg
#11

Hjälpte inte

Tyvärr så hjälpte inte det. Hmmm konstigt.........

Medlem sedan juni 20011 732 inlägg
#12

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! :)

Medlem sedan maj 2000267 inlägg
#13

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

Medlem sedan sep. 20011 914 inlägg
#14
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()) %>
Medlem sedan jan. 20012 204 inlägg
#15

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.

Medlem sedan sep. 20011 914 inlägg
#16

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>
Medlem sedan maj 2000267 inlägg
#17

Ä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....

277 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)