webForumDet fria alternativet

Ändra utseende på cell i kalender om den innehåller text?

.NET

3 svar · 292 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Jag har en

public void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
	CalendarDay d = ((DayRenderEventArgs)e).Day;
	TableCell c = ((DayRenderEventArgs)e).Cell;
	...

metod och i den har jag satt ut (tills vidare) statiska LiteralControl med text i kalendern.. dessa representerar att någon har bokat något den dagen.. hur gör jag för att ändra bakgrundsfärgen på den cell som har text i sig...? Samt att jag gör den isSelectable = false så att man inte kan klicka den för att boka just den dagen?

alltså något i stil med...

if(cell har en LiteralControl eller text i sig)
{
   c.BackColor = System.Drawing.Color.Aqua; //gör just bara den cellen till blå
   d.IsSelectable = false; //gör just den dagen till icke klickbar
}
Medlem sedan sep. 20011 914 inlägg
#2
private void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
   if(dagen_har_data)
   {
      e.Cell.Controls.Clear();
      e.Cell.Controls.Add(new LiteralControl(e.Day.DayNumberText));
      e.Cell.BackColor = Color.Aqua;
   }
}
...
//Totalt meningslös kod.
CalendarDay d = ((DayRenderEventArgs)e).Day;
TableCell c = ((DayRenderEventArgs)e).Cell;
...
Medlem sedan juni 2000504 inlägg
#3

hej, såg precis ditt svar.. tack så mycket.. det är if(dagen_har_data)
alltså det som ska stå som if villkor som jag inte vet hur jag ska skriva.. Jag postar hur jag använt c och d nedan (en del är hårdkodat just nu):

public void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
	CalendarDay d = ((DayRenderEventArgs)e).Day;
	TableCell c = ((DayRenderEventArgs)e).Cell;

			
	arrBookedDays = new String[13][];
	for(int i = 0; i<13; i++)
		arrBookedDays[i] = new String[32];

	arrBookedDays[3][12] = "<a href='#'>Seminarium på Gr...</a>";
	arrBookedDays[3][29] = "<a href='#'>17:00 Träffa H...</a>";

	try
	{
		string bookedDays = arrBookedDays[d.Date.Month][d.Date.Day];

		if(bookedDays != "")
		{
			c.Controls.Add(new LiteralControl("<br>" + bookedDays));
			/*
			e.Cell.Controls.Clear();
			e.Cell.Controls.Add(new LiteralControl(e.Day.DayNumberText));
			e.Cell.BackColor = Color.Aqua;
			*/
		}
	}
		
	catch(Exception bookEx)
	{
		this.lblConfirmDate.Text = "Error: "  + bookEx.ToString();
	}
}

så nu står det t.ex. arrBookedDays[3][12] och då kommer 12 mars att ha texten "Seminarium på Gr..." och arrBookedDays[3][29] och då kommer 29 mars att ha "Träffa H..." Så just nu är villkoret if(bookedDays != "").

Det jag vill är att bara mars 12 och mars 29 ska få aqua (eller nån snyggare färg kanske :) ) och inte bli klickbara. Om jag lägger in din kod i den if satsen såsom den är skriven nu så blir alla celler i hela kalenderna aqua och alla celler blir ej klickbara. Men det kanske beror på hur if() är definierat?

Om det finns nåt mycket bättre sätt så använder jag gärna det då, utan c och d som jag har nu.. bara resultatet blir detsamma :)

Medlem sedan juni 2000504 inlägg
#4

läste på MSDN lite granna.. och förstod lite hur man kunde göra if satsen.. om man hårdkodar datum så såg jag att det funkar utmärkt som du sa.. t.ex.

if(e.Day.Date == new DateTime(2004, 3, 12))
{
	e.Cell.Controls.Clear();
	e.Cell.Controls.Add(new LiteralControl("12<br>" + bookedDays));
	e.Cell.BackColor = Color.Aqua;
}

det gick även bra att göra en if sats som kontrollerade hela arrayen.. o sen sätta e.Day.IsSelectable = false; o sen else true för resten.. :)

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)