Problem med at skjule visse felter

Tags:    asp.net

Hej alle.. Jeg har lavet et udtræk fra min MS SQL db, hvor jeg viser tidligere jobs i mit CV. Min kode ser således ud:

>>>>>

SqlConnection sqlconn3 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());

SqlCommand sqlcom3 = new SqlCommand("SELECT * from erhverv", sqlconn3);

SqlDataReader dataread3 = null;

sqlconn3.Open();

dataread3 = sqlcom3.ExecuteReader();

Repeater_Job.DataSource = dataread3;

Repeater_Job.DataBind();

sqlconn3.Close();

<<<<<<<<<<

Nu er mit spørgsmål så:

Jeg har lavet en hjemmeside for et firma. Derfor har jeg i min repeater sat et link ind hvor jeg smider linket til denne hjemmeside.. Problemet består i det jo er en repeater og derfor smider et tomt link, der hvor der ikke er nogen hjemmeside.. Altså ved andre jobs.. Hvordan gør jeg så de ikke er visible når der ikke er et link en URL i linket??

På forhånd tak



7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Hej,

Jeg tror du kan lave det i en metode som "producerer" indholdet i feltet link.

<asp:Repeater runat="server" ID="Repeater1"
..
..
<ItemTemplate>
..
<%# MaybeShowLink(Container.DataItem) %>
..
</asp:Repeater>

I din codebehind har du så koden for metoden

protected string MaybeShowLink(object dataItem)
{
string _output = "<span style='color:green;'>(<i>{0}</i>;)</span>";
..
..
if (DataBinder.GetPropertyValue(dataItem, "mitLink") == <et-eller-andet)
{
_output = String.Format(_output,
DataBinder.GetPropertyValue(dataItem, "mitLink"));
}
else
{
_output = <noget-smart-html>;
}

return _output;
}

Ideen er altså, at dit "RepeaterItem" bliver sat til linket+noget smart html hvis den er noget (not null, not DbNull, not string.empty eller hvad-ved-jeg) og til noget andet smart html hvis den alligevel er tom.

Koden er hurtigt kradset ned så den skal sikkert lige gennemtænkes lidt :-)




I får også lige min Repeater, så i kan se hvad jeg har gjort indtil videre..

Som i kan se er problemet jeg har brugt et almindeligt html a tag til det.. Det vil sige jeg ikke kan få det til at at runat="server".. Hvis jeg bruger asp:hyperlink, kan jeg ikek få lov til at sætte en eval ind i navigate url..

<asp:Repeater ID="Repeater_Job" runat="server">
<HeaderTemplate>
<h3>
Erhvervserfaring</h3>
<div id="left_udd" class="uddTop">
<div class="right">
<span class="bold">Periode:</span>
</div>
<span class="bold"></span>
</div>
</HeaderTemplate>
<ItemTemplate>
<div id="left_udd" class="udd">
<div class="right">
<%# Eval("periode") %>
</div>
<%# Eval("job") %>
<a href="http://<%# Eval("link") %>" target="_blank">
<asp:Label ID="Label_Joblink" runat="server" Visible="true" Text="Se Siden"></asp:Label></a>
</div>
</ItemTemplate>
<FooterTemplate>
<div class="streg">
</div>
</FooterTemplate>
</asp:Repeater>


Det jeg så tænkte på var om jeg kunne smide den Label ind jeg har nu og lave endnu et udtræk som jeg databinder til noget andet så jeg kan lave en if sætning, der tjekker om der er noget i det felt, der hedder link. Hvis der ikke er skal label være visible=false

Kunne det være en løsning og hvad skal jeg databinde det til??



Indlæg senest redigeret d. 15.07.2008 21:00 af Bruger #14001
hum ja,

Du kunne jo lave en if-sætning i metoden

MaybeShowLink()
{
string _output;

if (DataBinder.GetPropertyValue(dataItem, "mitLink")) == null)
{
// html er ikke min stærke side !
_output = "style<span style=display:none></span>";
}
else
{
_output = "<a href=http://{0}>{1}</a>";
_output = String.Format(_output,
DataBinder.GetPropertyValue(dataItem, "mitLink"),
DataBinder.GetPropertyValue(dataItem, "mitFirma"));
}

return _output;
}



Kan godt være du bliver nødt til at forklare det lidt mere detaljeret hvad du gør.. Er ikke vanvittig skarp til det endnu :P



Har fundet løsningen:

You can use a helper function:



protected bool checkNull(object m)
{
if (Convert.IsDBNull(m))
{
return false;
}
else
return true;

}

and use the visible property for your controls(label, hyperlink...):

Visible='<%# checkNull(Eval("link")) %>'



Hej,

Godt du fik det til at virke.

For lige at runde den anden konstruktion af, drejer det sig om at du, istedet for at benytte den normale "Eval" metode, skriver din egen metode til at generere noget tekst som repeateren kan indsætte når den genererer html'en.
Fordelen er, at din egen metode kan bygges mere selektiv end Eval metoden som jo kritikløst blot returnerer teksten.



OK... takker.. Men nok lige avanceret nok for mig endnu :)

-Andreas



t