Avatar billede dj_uncas Nybegynder
24. september 2005 - 15:02 Der er 6 kommentarer og
1 løsning

Kalender liste, m. forskellige tekst

Hejsa!

Jeg er i gang med at lave en kalender, der vises som en liste i en Repeater. Mit problem er følgende:

Jeg vil gerne have det sådan at hvis der bliver valgt to datoer når arrangementet bliver oprettet skal der stå eks. '25. september til 27. september' og hvis der kun er valgt en dato skal der stå eks. '25. september' altså uden 'til'.

Hvordan kan man ordne det? Jeg har ikke ummidelbart nogen løsning der ikke involvere kode i selve repeateren i aspx-filen i <% %> og det vil man jo gerne undgå..
Avatar billede snepnet Nybegynder
24. september 2005 - 15:16 #1
du kan gøre det programmatisk ved at spørge på valgte datoer i kalender:

hvis du allerede abbonerer på ItemDataBound eventet, kan du jo gøre noget i denne stil:

// forestiller mig at du så har kalenders og en label i hver item
Calender calender = e.Item.FindControl("CalenderId") as Calender;
Label calenderLabel = e.Item.FindControl("LabelId") as Label;

// hvis de er der begge to
if(calender != null && calenderLabel != null)
{
  // gør du ét hvis der er valgt én dato
  if(calender.SelectedDates.Count == 1
  {
    calenderLabel.Text = calender.SelectedDates[0].ToString();
  }
  // og noget andet hvis der er valgt flere
  else if(calender.SelectedDates.Count > 1)
  {
    calenderLabel.Text = String.Format("{0} til {1}", calender.SelectedDates[0], calender.SelectedDates[calender.SelectedDates.Count-1]);
  }
}

mvh
Avatar billede dj_uncas Nybegynder
24. september 2005 - 15:56 #2
Jeg bruger ikke Calendar kontrollen, men en Repeater, for at få arrangementerne til at stå på liste-form
Avatar billede snepnet Nybegynder
24. september 2005 - 19:06 #3
ok - det er lidt svært at vide hvad du så har behov for så..... kan du ikke vise din itemtemplate, så vi har lidt at gå med?
mvh
Avatar billede dj_uncas Nybegynder
24. september 2005 - 23:21 #4
Jo, det er ikke så kompliceret (i grove træk):

<ItemTemplate>
    <tr>
        <td>
            <%# DataBinder.Eval(Container.DataItem, "StartDate" %><br />
            til <%# DataBinder.Eval(Container.DataItem, "EndDate" %>
        </td>
    </tr>
</ItemTemplate>

Det er så stykket med "<br /><%# DataBinder.Eval(Container.DataItem, "EndDate" %>" der skal "forsvinde" hvis 'StartDate' = 'EndDate'
Avatar billede snepnet Nybegynder
25. september 2005 - 00:22 #5
tror det nemeste vil være at du gør noget i denne stil:

// på selve din repeater :
<asp:Reapeater id="someRepeater" runat="server" OnItemDataBound="someRepeater_ItemDataBound">
<ItemTemplate>
    <tr>
        <td>
            <asp:Label id="lblMessage" runat="server" />
        </td>
    </tr>
</ItemTemplate>
</asp:Repeater>

og så i din kode noget i denne stil:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    Label message = e.Item.FindControl("lblMessage") as Label;
    DataRowView drv = e.Item.DataItem as DataRowView;
    DateTime startData == (DateTime)dr["StartDate"];
    DateTime endDate == (DateTime)dr["EndDate"];
   
    if(startDate == endDate)
    {
      message.Text = endDate.ToString();
    }
    else
    {
      message.Text = String.Format("{0} til {1}", startDate, endDate);

    }
  }
}

mvh
Avatar billede dj_uncas Nybegynder
25. september 2005 - 00:52 #6
Ja, det ser da fornuftigt ud. Jeg vidste ikke at man kunne ligge Labels inde i en ItemTemplate. Jeg har faktisk haft en Literal kontrol i tankerne, men tænkte at det kunne man nok ikke, da kontrollen så har samme ID i flere rækker?!

Nå, men smid et svar :-) Tak for hjælpen!
Avatar billede snepnet Nybegynder
25. september 2005 - 00:58 #7
du får et svar her :o)
mvh
(det resulterende id for de kontroller du lægger i din template er ikke det du angiver i templaten - frameworket sikrer at de er unikke, og e.Item.FindControl("...") sørger for at finde den rigtige kontrol til dig igen... du kan se hvordan id's bliver genereret, ved at kigge i den resulterende html).
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