Avatar billede gurvic Nybegynder
19. marts 2005 - 22:21 Der er 12 kommentarer og
1 løsning

ifsætning i repeater?

ok nu er jeg på den igen. Jeg har en repeater hvor jeg får vist en række resultater hentet fra db, ser sådan ud:

<ItemTemplate>

<tr>
<td width=20%><%# DataBinder.Eval(Container.DataItem,"result1")>-<%# DataBinder.Eval(Container.DataItem,"result2")%></td>

</tr>
</ItemTemplate>

den viser så resultater som 54-45 f.eks. nu vil jeg så gerne at hvis result1 > result2 så vises hele resultatet i skrevet i grønt. Men hvordan gør jeg så lige det?
det er vel en ganske simpelt if sætning, men jeg kan ikke gennemskue, skal den være hernede i repeateren eller oppe i selve koden.
Fylder iøvrigt min repeater sådan her:

sql = "select * from war";
objCommand = new OleDbCommand(sql, objConnection);
opReader = objCommand.ExecuteReader();
wars.DataSource = opReader;       
wars.DataBind();
Avatar billede snepnet Nybegynder
20. marts 2005 - 00:05 #1
hej gurvic

jeg ville nok selv lave det i min code-behind, ved abbonnering på ItemDataBound... du kan oprette en handler for eventet sådan her :

wars.ItemDataBound += new DataGridItemEventHandler(wars_ItemDataBound);

og så en handler sådan her :

private void wars_ItemDataBound(object sender, DataGridItemEventArgs e)
{
  if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    int result1 = (int)((DataRowView)e.Item.DataItem)["result1"];
    int result2 = (int)((DataRowView)e.Item.DataItem)["result2"];
    if(result1 > result2)
    {
      HtmlTableCell cell = (HtmlTableCell)e.Item.FindControl("theCell");
      cell.Style.Add("color","green");
    }
  }
}

og så skal du så lige sørge for at du kan arbejde direkte på cellen :
<ItemTemplate>
<tr>
<td width=20% id="theCell" runat="server">...</td>
</tr>
</ItemTemplate>

koden vil fejle, hvis det der står i din datakilde ikke kan castes til en int, så hvis det er noget du kan risikere skal du lige sørge for at håndtere det.

mvh
Avatar billede jakobg Nybegynder
21. marts 2005 - 09:52 #2
Jeg ville gøre som følger:

<ItemTemplate>
<tr>
<td width='20%' class='<%# iif(Container.DataItem("result1") > Container.DataItem("result2"), "green_style", "red_style") %>'><%# Container.DataItem("result1") & "-" & Container.DataItem("result2") %></td>
</tr>
</ItemTemplate>

Alternativt kan du også lave en protected function i din codebehind, som returnerer en css-class alt efter værdierne i de to kolonner du sammenligner.
Avatar billede gurvic Nybegynder
22. marts 2005 - 19:58 #3
undskylder den lange svartid.
Snepnet>> din kode ser helt fint ud og ganske som du forudsagde fik jeg fejl når der skal castes.
får fejlen : Specified cast is not valid.
i linien:
int result1 = (int)((DataRowView)e.Item.DataItem)["result1"];

Jeg forstår det bare ikke helt, godt nok er det er tekstfelt, men der er kun tal gemt i det.
Når jeg tilføjer data  til databasen gør jeg det sådan her:
string [] arrRes = strRes.ToString().Split(Convert.ToChar("-"));
string strRes1 = arrRes[0];
string strRes2 = arrRes[1];
hvor det så er strRes1 og strRes2 der bliver indsat.
altså hvis det ændrer noget?? er nybegynder så ikke helt med.
Har iøvrigt selvfølgelig lige ændret datagrid i din kode til datarepeater men det burde ikke ændre noget.

jakobg>> din løsning med ifsætningen der virker ikke. Får en fejl der hedder invalid if expression, eller noget i den stil...
Avatar billede snepnet Nybegynder
22. marts 2005 - 20:05 #4
du kan prøve sådan en her :

int result1 = int.Parse(((DataRowView)e.Item.DataItem)["result1"].ToString());

IIf er for øvrigt en VB-ting.

mvh
Avatar billede gurvic Nybegynder
22. marts 2005 - 20:12 #5
stadig samme fejl
ok så forstår jeg da meget bedre iif ikke virkede
Avatar billede snepnet Nybegynder
22. marts 2005 - 21:00 #6
så er det nok fordi der ikke står et tal i feltet... det er nok noget du under alle omstændigheder skal håndtere...
mvh
Avatar billede gurvic Nybegynder
23. marts 2005 - 20:06 #7
jeg er nu 100% sikker på det er tal der står i de felter
jeg må lige rode videre med det så
Avatar billede snepnet Nybegynder
23. marts 2005 - 21:40 #8
du har husket denne her ikke ?
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

mvh
Avatar billede gurvic Nybegynder
24. marts 2005 - 22:01 #9
jo jeg har husket den.
Nu har jeg ændret db så felter er af type heltal, men den fejler stadig :(
Avatar billede snepnet Nybegynder
24. marts 2005 - 22:17 #10
den hvis fejle hvis der står null i feltet - altså hvis der ikke er indsat noget endnu.... men det betyder ikke så meget - du bør altid sikre den slags kode mod fejl alligevel.
mvh
Avatar billede gurvic Nybegynder
24. marts 2005 - 22:30 #11
ja selvfølgelig skal jeg sikre mod fejl aligevel, men nu skal jeg da lige have noget kode til at virke først. Og lige nu det 100% tal der står deri.
Avatar billede snepnet Nybegynder
24. marts 2005 - 22:52 #12
denne her kode :

private int result = 0;

private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        result += (int)((DataRowView)e.Item.DataItem)["Result1"];
    }
}

burde gå fint hvis kolonnen result1 er af typen int, og der 100% sikkert står et heltal i den kolonne i dit datagrundlag... denne vil også gå :
result += int.Parse(((DataRowView)e.Item.DataItem)["Result1"].ToString());

så hvis du får en invalidcastexception er der sikkert en af rækkerne der står null i ell.

hvis det ikke er tilfældet må du sende mig noget mere kode, så jeg kan se præcis hvad du gør...
hvilken database bruger du for øvrigt, og kan du ikke lave en copy/paste af fejlen og poste det sammen med din kode, hvis der stadig er ballade ?

mvh
Avatar billede gurvic Nybegynder
08. juli 2005 - 21:25 #13
er vist lukketid her. Undskylder mange gange. Fik iøvrigt aldrig løst problemet, men skal heller ikke bruge det mere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester