webForumDet fria alternativet

Dynamisk tabell

16 svar · 493 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

ok, efter att jag byggt upp en tabell med Response.Write ;) HÄR Så har jag gett mig på dynamiskt uppbyggda tabeller :)

Men hur gör man ifall man vill ha en <tr> med colspan="2" och sen resten av <tr> utan.

Man bör väl kunna använda en "template" men jag vet inte riktigt hur man gör.

Hoppas ni kan hjälpa mig in på rätt spår :)

Han-SoloMedlem sedan jan. 2001290 inlägg
#2

Har inte tillgång till mina filer just nu... men jag antar att du är ute efter nått liknande jag gjorde i veckan...

1. Använd dig av <asp:Table> i aspx sidan... ja du kan använda asp:TableRow och asp:TableCell oxå för att tjorvatill cellerna som du vill ha dem.

2. Nu kan du (ifall du minst har <asp:Table>) kommaåt tabellen från code behind sidorna...

new TableRow()
new TableCell()

osv...

på så vis kan man möblera till tabeller efter tycke och smak... DYNAMISKT!!!

/Var det svar nog?

icaaqMedlem sedan okt. 20005 273 inlägg
#3

hmmm....

Jag tänkte mer att jag skulle använda header, item och Footer template.....

och sedan kanske fa sa att headertemplaten bara har en cell, sedan lista alla manadens dagar i itemtemplaten och sedan en snygg avslutning med footer.

ps mitt tangentbord fick spel sa jag kan inte skriva ordentligt ds

renholmMedlem sedan apr. 20012 266 inlägg
#4

Du kan definera colspan i style="". Lägg bara till style="padding-left: 10px; padding-right: 10px; padding-top: 5px; padding-bottom: 5px".

icaaqMedlem sedan okt. 20005 273 inlägg
#5

Jag vet inte om jag är ute och cyklar men när jag försöker att göra så här får jag inte upp några "padding" alternativ :l

[red]
Style s = new Style();
s.
[/red]

hur menar du att jag ska göra :q

icaaqMedlem sedan okt. 20005 273 inlägg
#6

Jag fixade det.... :e

[red]int numrows;
			int numcells = 2;
			CultureInfo cultSwe = new CultureInfo("sv-SE");
			DateTime dtedate = DateTime.Now;
			numrows = DateTime.DaysInMonth(dtedate.Year, dtedate.Month);
			DateTime dteDay = new DateTime(dtedate.Year, dtedate.Month, 1);
			//Style s = new Style();
			//s.
			TableRow row1 = new TableRow();
            TableCell cell1 = new TableCell();
			cell1.Controls.Add(new LiteralControl(dteDay.Date.ToString("y", cultSwe)));
			[b]cell1.ColumnSpan = 2;[/b]
			row1.Cells.Add(cell1);
			Table2.Rows.Add(row1);

			for (int j=0; j<numrows; j++)
			{            
				TableRow r = new TableRow();
                
					TableCell c = new TableCell();
					c.Controls.Add(new LiteralControl(dteDay.Date.ToString("dd", cultSwe)));	
					r.Cells.Add(c);
					TableCell d = new TableCell();
					d.Controls.Add(new LiteralControl(dteDay.Date.ToString("dddd", cultSwe)));	
					r.Cells.Add(d);

				
				Table2.Rows.Add(r);
				dteDay = dteDay.AddDays(1);
			}
[/red]

Nu kan jag köra vidare lite till :)

icaaqMedlem sedan okt. 20005 273 inlägg
#7

styles

Tjenare igen..... hehe
nu har jag denna:

[red]
Style sDatum = new Style();
			[b]sDatum.Width = 10;[/b]
			sDatum.Font.Name = "Verdana";
			sDatum.Font.Size = 10;[/red]

men hur skriver jag in att jag vill ha 10% ?

icaaqMedlem sedan okt. 20005 273 inlägg
#8

Jag fixade även det.

[red]
Style sDatum = new Style();
			sDatum.Width = Unit.Percentage(10);
			sDatum.Font.Name = "Verdana";
			sDatum.Font.Size = 10;[/red]

:)

PaceMedlem sedan juni 20019 024 inlägg
#9

Du fixar det mesta icaaq. :e

icaaqMedlem sedan okt. 20005 273 inlägg
#10

Tillbax :e

Jag har denna

[red]
TableRow row1 = new TableRow();
			TableCell cell1 = new TableCell();
			TableCell cell2 = new TableCell();
 			cell1.Controls.Add(new LiteralControl(dteDay.Date.ToString("y", cultSwe)));
			cell1.ApplyStyle(sManad);
			row1.Cells.Add(cell1);
			cell2.Controls.Add(new ??? [b]Här vill jag köra doLinks(dtedate)[/b]
			cell2.HorizontalAlign = HorizontalAlign.Right;
			Table2.Rows.Add(row1);[/red]

Hur ska jag skriva för att kunna köra en funktion i dynamisk cell?

icaaqMedlem sedan okt. 20005 273 inlägg
#11

Tjenare igen alla .Net:are!!

Nu har jag kommit så här långt

[red]
		private void Page_Load(object sender, System.EventArgs e)
		{
			// Deklarerar lite variabler
			int numrows;
			string path = Request.FilePath;
			CultureInfo cultSwe = new CultureInfo("sv-SE");
			
			// Kollar lite datum
			DateTime dtedate = DateTime.Now.Date;
			if (Request.QueryString["dteDate"] != null)
			{
				dtedate = Convert.ToDateTime(Request.QueryString["dteDate"]);
			}
			numrows = DateTime.DaysInMonth(dtedate.Year, dtedate.Month);
			DateTime dteDay = new DateTime(dtedate.Year, dtedate.Month, 1);

			// Skapar en style för datumet
			Style sDatum = new Style();
			sDatum.Width = Unit.Percentage(10);
			sDatum.Font.Name = "Verdana";
			sDatum.Font.Size = FontUnit.XSmall;
			sDatum.BorderWidth = Unit.Pixel(1);
			sDatum.BorderColor = Color.Coral;
			sDatum.BorderStyle = BorderStyle.Dotted;
			
			// Skapar en style för år och månad
			Style sArManad = new Style();
			sArManad.Width = Unit.Percentage(10);
			sArManad.Font.Name = "Verdana";
			sArManad.Font.Size = FontUnit.XSmall;
			sArManad.BorderWidth = Unit.Pixel(1);
			sArManad.BorderColor = Color.Coral;
			sArManad.BorderStyle = BorderStyle.Dotted;

			// Skapar en style för Länkarna
			Style sLank = new Style();
			sLank.Width = Unit.Percentage(90);
			sLank.Font.Name = "Verdana";
			sLank.Font.Size = FontUnit.XSmall;
			sLank.BorderWidth = Unit.Pixel(1);
			sLank.BorderColor = Color.Coral;
			sLank.BorderStyle = BorderStyle.Dotted;

			// Skapar en style för veckodagarna
			Style sVeckoDagar = new Style();
			sVeckoDagar.Width = Unit.Percentage(90);
			sVeckoDagar.Font.Name = "Verdana";
			sVeckoDagar.Font.Size = FontUnit.XSmall;
			sVeckoDagar.BorderWidth = Unit.Pixel(1);
			sVeckoDagar.BorderColor = Color.Coral;
			sVeckoDagar.BorderStyle = BorderStyle.Dotted;

			// Skapar en style för månaden
			Style sManad = new Style();
			sManad.Font.Name = "Verdana";
			sManad.Font.Size = FontUnit.XSmall;
			sManad.BorderWidth = Unit.Pixel(1);
			sManad.BorderColor = Color.Coral;
			sManad.BorderStyle = BorderStyle.Dotted;

			// Skapar en style för söndagar
			Style sSondag = new Style();
			sSondag.Font.Name = "Verdana";
			sSondag.Font.Size = FontUnit.XSmall;
			sSondag.BorderWidth = Unit.Pixel(1);
			sSondag.BorderColor = Color.Coral;
			sSondag.BorderStyle = BorderStyle.Dotted;
			sSondag.BackColor= Color.PeachPuff;
			
			/* Börjar bygga tabellen genom att visa månad och sedan länkarna till
			 angränsande månader*/  
			TableRow row1 = new TableRow();
			TableCell cell1 = new TableCell();
			cell1.Controls.Add(new LiteralControl(doLinks(dtedate, path)));
			cell1.ColumnSpan = 2;
			cell1.HorizontalAlign = HorizontalAlign.Center;
			cell1.ApplyStyle(sLank);
			row1.Cells.Add(cell1);
			Table2.Rows.Add(row1);
			
			// Lägger till dagarna i månaden
			for (int j=0; j<numrows; j++)
			{            
				TableRow r = new TableRow();
                
				TableCell c = new TableCell();
				c.Controls.Add(new LiteralControl(dteDay.Date.ToString("dd", cultSwe)));
				if (dteDay.Date == DateTime.Now.Date)
				{
				c.Controls.Add(new LiteralControl("&laquo;"));
				}
				if (dteDay.DayOfWeek == 0)
				{
					c.ApplyStyle(sSondag);
				}
				else
				{
					c.ApplyStyle(sDatum);
				}
				
				r.Cells.Add(c);
				TableCell d = new TableCell();
				d.Controls.Add(new LiteralControl(dteDay.Date.ToString("dddd", cultSwe)));	
				if (dteDay.DayOfWeek == 0)
				{
					d.ApplyStyle(sSondag);
				}
				else
				{
					d.ApplyStyle(sVeckoDagar);
				}
				r.Cells.Add(d);

			
				Table2.Rows.Add(r);
				dteDay = dteDay.AddDays(1);
			}

		}
		static string doLinks(DateTime dteDate, string Path)
		// Denna funktion fixar till länkarna till angränsande månader
		{
			CultureInfo cultSwe = new CultureInfo("sv-SE");
			return "<a href=\""+Path+"?dteDate="+dteDate.AddMonths(-1)+ "\" title=\""+dteDate.Date.AddMonths(-1).ToString("y", cultSwe)+ "\">&laquo;</a> "+ dteDate.Date.ToString("y", cultSwe)+" <a href=\""+Path+"?dteDate="+dteDate.AddMonths(1)+ "\" title=\""+dteDate.Date.AddMonths(1).ToString("y", cultSwe)+"\">&raquo;</a>";
		}[/red]

Men jag har lite funderingar:

  1. Hur gör jag om jag vill göra en tabell till i en dynaimskt uppbyggd cell?
  2. Om ni tittar på koden ovanför vad kan jag göra för att optimera den?
  3. Tycker ni att jag är jobbig ;) ?
NETworkMedlem sedan juni 20011 732 inlägg
#12

Rent spontant så skulle jag nog ha mina css-klasser i ett vanligt css-dokument istället om du inte uutyckligen behöver sätta dem dynamiskt. Dels blir det en massa kod, dels kan måste du kompilera sidan om du vill ändra i dem.

I din sista funktion dolinks säger jag samma sak som tidigare; undvik att returnera htmlkod, inte för prestandans skull men för översiktligheten och dynamiken. Rätt var det är så vill man komma åt den där länken (kanske inte händer i detta fallet men ändå) och då är det en bra vana att alltid använda asp.net-kontroller. Returnera en <asp:hyperlink> istället.

Jag vågar inte på rak arm svara på hur du gör en tabell i en dynamisk tabell från koden, någon annan kanske vet. Annars får vi hjälpas åt att lösa det senare om du inte fixar det själv. :)

icaaqMedlem sedan okt. 20005 273 inlägg
#13

YEEAAA!!

Jag fick det att funka ..... :e
Det var bara att göra en annan tabell först och sedan sätta in den, så här

[red]
Table Table3 = new Table();

TableRow row2 = new TableRow();
			TableCell cell3 = new TableCell();
			cell3.Controls.Add(new LiteralControl(doLinks(dtedate, path)));
			cell3.ColumnSpan = 2;
			cell3.HorizontalAlign = HorizontalAlign.Center;
			cell3.ApplyStyle(sLank);
			row2.Cells.Add(cell3);
			Table3.Rows.Add(row2);
			TableRow row1 = new TableRow();
			TableCell cell1 = new TableCell();
			cell1.Controls.Add([b]Table3[/b]);
			cell1.ColumnSpan = 2;
			cell1.HorizontalAlign = HorizontalAlign.Center;
			cell1.ApplyStyle(sLank);
			row1.Cells.Add(cell1);
			Table2.Rows.Add(row1);[/red]

Nu kan jag köra vidare........brooom

icaaqMedlem sedan okt. 20005 273 inlägg
#14

Formtaggen :OO

Jag håller nu på med ett formulär men jag får inte in en listbox där jag vill ha den ........alltså mellan <form> </form> om jag visar lite kod kanske ni förstår bättre:

Här gör jag en listbox.

[red]
ListItem lSkala = new ListItem("0", "0");
ListBox lBox = new ListBox();
	for (int i=0; i == 100; i++ )
	{
		lBox.Items.Add(new ListItem(i.ToString(), i.ToString()));
	}
lBox.Attributes.Add("runat", "server");[/red]

Och sedan gör jag en HtmlForm

[red]
HtmlForm lForm = new HtmlForm();
lForm.Enctype = "text/plain";
lForm.Method = "post";
lForm.Attributes.Add("runat", "server");
[/red]

Sen när jag ska stoppa in den i tabellen gör jag följande

[red]
TableRow row2 = new TableRow();
TableCell cell2 = new TableCell();
TableCell cell3 = new TableCell();
cell2.Controls.Add(new LiteralControl("Skala 0 till 100%"));
cell2.ApplyStyle(sLank);
cell2.HorizontalAlign = HorizontalAlign.Left;
row2.Cells.Add(cell2);
cell3.Controls.Add(lForm);
cell3.Controls.Add(lBox);
cell3.ApplyStyle(sLank);
cell3.HorizontalAlign = HorizontalAlign.Left;
row2.Cells.Add(cell3);

tInsert.Rows.Add(row1);
tInsert.Rows.Add(row2);[/red]

Hur ska jag göra föra att form taggen inte ska stängas på en gång :q

renholmMedlem sedan apr. 20012 266 inlägg
#15

Eftersom du endast kan ha en server kontrollerad <form> så måste en och samma <form> omsluta hela sidan.

<body>
<form runat="server">
<!-- Sidan -->
</form>
</body>
icaaqMedlem sedan okt. 20005 273 inlägg
#16

nja...jag löste det som så att jag la dit den i HtmlForm:en så här

[red]lForm.Controls.Add(lSkala);[/red]

Men jag kan på nått sätt inte infoga datan som jag har i listboxen till DropDownListen.....

Nån som har nån idé?

PS nu går jag och lägger mig.....

icaaqMedlem sedan okt. 20005 273 inlägg
#17

Jag fixade även det :e

Jag hade glömt dataBindingen... :r

134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)