Just nu i M3-nätverket
Gå till innehåll

Colspan i befintlig tabell


gelki
 Share

Rekommendera Poster

Haha 12 år sedan jag var och röjde här.
Kul att forumet finns kvar.

Jag har en fråga i klassisk asp. Är det någon som vet hur i helskotta jag får dynamisk colspan i en tabell ovanför en tabell med månadens datum?
Om du tittar på bilden så är det 3 rader. rad 1, högst upp har veckonummer, rad 2 datum i månaden och sista raden veckodagar. Veckonummer högst upp hade jag velat ha precis som det är men inte för varje dag utan en siffra för varje vecka. Detta presenterar man nog bäst med colspan i en tabell. Problemet är att mitt huvud mäktar inte med att hitta en lösning på detta. Är ju ingen programmerare som lever på sånt men man gör ju så gott man kan. Jag hoppas jag något så här klargjort problematiken...
 

<%
'#--plocka ut veckonummer från ett datum--#
Function vecka(MyDate)
  vecka = DatePart("ww",MyDate,vbMonday,vbFirstFourDays)
End Function

'#--plocka ut första datum i vald datum--#
Function firstDayOfMonth(MyDate)
  firstDayOfMonth = date() + 1 - day(date())
End Function

'#-- Plocka ut sista datum i vald datum --#
Function lastDayOfMonth(MyDate)
	firstDayOfMonthF = date() + 1 - day(date())
  lastDayOfMonth = dateadd("m", 1, firstDayOfMonthF ) - 1
End Function

'#--plocka ut namnet på veckodagen i vald datum--#
Function veckodagNamn(MyDate)
  veckodagNamn = WeekDayName(Weekday(MyDate))
End Function

'#--plocka ut månadsnamn från ett datum--#
Function monthNameF(MyDate)
	manadTal=Month(MyDate)
	monthNameF=MonthName(manadTal)
End Function


'#--- Denna månad rubrikutskrifter--#
	fromDate=firstDayOfMonth(date())
	toDate=lastDayOfMonth(date())
	nood=DateDiff("y",fromDate,toDate)
	
	for er = 0 to nood
		ddt = DateAdd("d",er,fromdate)
		currentYear=Year(fromDate)
		currentMonthName=monthNameF(fromDate)
		
		'#-- veckor --#
		veckokolumner = veckokolumner & "<td>V." & vecka(ddt) & "</td>"
		'#-- Datum --#
		dagkolumner=dagkolumner & "<td>"& day(ddt) &"</td>"
		'#-- veckodagkolumner --#
		veckodagkolumner=veckodagkolumner & "<td>"& cutOff(UCase(veckodagNamn(ddt)),2) &"</td>"
	next
%>




Så här ska det se ut
image.thumb.png.8175860fc2cdf5b234cba931044e0d27.png


Så här ser det ut nu
image.png.2a7865fad7296d061bcfa8606f79ea75.png

Länk till kommentar
Dela på andra webbplatser

Det (allt för) enkla svaret är ju att sätta colspan=7 för veckoraden.

Dock med två saker att hantera.

1. Årets första och sista vecka är inte alltid 7 dagar.

2. Ändra i din loop så att variabeln veckokolumner bara utökas en gång per vecka

  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

16 timmar sedan, skrev Cluster:

Det (allt för) enkla svaret är ju att sätta colspan=7 för veckoraden.

Dock med två saker att hantera.

1. Årets första och sista vecka är inte alltid 7 dagar.

2. Ändra i din loop så att variabeln veckokolumner bara utökas en gång per vecka

Tackar.
Jag trixade till genom att räkna antal datumintervaller i veckan. På så sätt fick jag den dynamiska colspan för veckor nummer. Well, kanske inget fancy, men det funkar. Well. Ibland behöver man bara lämna grejer och sova istället. :D
 

'#-- loopa igenom veckorna endast genom den här månaden. --#
	getStartWeekThisMonth=vecka(firstDayOfMonth(date()))
	getEndWeekThisMonth=vecka(lastDayOfMonth(date()))
	'de=veckonummer
	for de = getStartWeekThisMonth to getEndWeekThisMonth
		'-- loopa igenom datum--
		fromDate=firstDayOfMonth(date())
		toDate=lastDayOfMonth(date())
		nood=DateDiff("y",fromDate,toDate)
		ColspanCount=0
		for er = 0 to nood
		ddt = DateAdd("d",er,fromdate)
			if vecka(ddt) = de then
			ColspanCount=ColspanCount+1	
			end if
		next
	veckokolumner = veckokolumner & "<td style=""border:solid silver 1px;"" colspan="""&ColspanCount&""">" & de & "</td>"		
	next



image.png.afa8b1484234f9b7e75ba6ab2ecfc2a6.png

 

Redigerad av gelki
Länk till kommentar
Dela på andra webbplatser

Så här hade jag gjort:

<!doctype html>
<html lang=en>
  <head>
    <meta charset=utf-8>
    <title>365442</title>
    <style>
      table, th, td {
        border: 1px solid;
      }
      th, td {
        text-align:center
      }
    </style>
  </head>
  <body>
<%
CurrDate = date()

FirstDateOfMonth = DateSerial(Year(CurrDate), Month(CurrDate) + 1, 1)
LastDateOfMonth = DateSerial(Year(CurrDate), 1 + Month(CurrDate), 0)
FirstDayOfMonth = DatePart("D",FirstDateOfMonth,vbMonday,vbFirstFourDays)
LastDayOfMonth = DatePart("D",LastDateOfMonth,vbMonday,vbFirstFourDays)

strWeekRow = "<tr>"
strDateRow = "<tr>"
strDayRow = "<tr>"

For i = FirstDayOfMonth To LastDayOfMonth
  thisDate = DateSerial(Year(CurrDate), Month(CurrDate), i)
  thisWeek = DatePart("ww",thisDate,vbMonday,vbFirstFourDays)
  thisWeekDay = WeekdayName(Weekday(thisDate),True)
  
  If Weekday(thisDate)=2 Then
    strWeekRow = strWeekRow & "<td colspan=7>"&thisWeek&"</td>"
    weekNumIsSet = True
  Else
    If Not weekNumIsSet Then
      thisColspan = 9 - Weekday(thisDate)
      strWeekRow = strWeekRow & "<td colspan="&thisColspan&">"&thisWeek&"</td>"
      weekNumIsSet = True
    End If
  End If
  
  strDateRow = strDateRow & "<td>"&i&"</td>"
  strDayRow = strDayRow & "<td>"&thisWeekDay&"</td>"
Next

strDayRow = strDayRow & "</tr>"
strDateRow = strDateRow & "</tr>"
strWeekRow = strWeekRow & "</tr>"
%>
    <h1><%=MonthName(Month(CurrDate))&" "& Year(CurrDate)%></h1>
    <table>
      <%=strWeekRow%>
      <%=strDateRow%>
      <%=strDayRow%>
    </table>

  </body>
</html>

 

Länk till kommentar
Dela på andra webbplatser

2022-02-22 11:16, skrev Cluster:

Så här hade jag gjort:

<!doctype html>
<html lang=en>
  <head>
    <meta charset=utf-8>
    <title>365442</title>
    <style>
      table, th, td {
        border: 1px solid;
      }
      th, td {
        text-align:center
      }
    </style>
  </head>
  <body>
<%
CurrDate = date()

FirstDateOfMonth = DateSerial(Year(CurrDate), Month(CurrDate) + 1, 1)
LastDateOfMonth = DateSerial(Year(CurrDate), 1 + Month(CurrDate), 0)
FirstDayOfMonth = DatePart("D",FirstDateOfMonth,vbMonday,vbFirstFourDays)
LastDayOfMonth = DatePart("D",LastDateOfMonth,vbMonday,vbFirstFourDays)

strWeekRow = "<tr>"
strDateRow = "<tr>"
strDayRow = "<tr>"

For i = FirstDayOfMonth To LastDayOfMonth
  thisDate = DateSerial(Year(CurrDate), Month(CurrDate), i)
  thisWeek = DatePart("ww",thisDate,vbMonday,vbFirstFourDays)
  thisWeekDay = WeekdayName(Weekday(thisDate),True)
  
  If Weekday(thisDate)=2 Then
    strWeekRow = strWeekRow & "<td colspan=7>"&thisWeek&"</td>"
    weekNumIsSet = True
  Else
    If Not weekNumIsSet Then
      thisColspan = 9 - Weekday(thisDate)
      strWeekRow = strWeekRow & "<td colspan="&thisColspan&">"&thisWeek&"</td>"
      weekNumIsSet = True
    End If
  End If
  
  strDateRow = strDateRow & "<td>"&i&"</td>"
  strDayRow = strDayRow & "<td>"&thisWeekDay&"</td>"
Next

strDayRow = strDayRow & "</tr>"
strDateRow = strDateRow & "</tr>"
strWeekRow = strWeekRow & "</tr>"
%>
    <h1><%=MonthName(Month(CurrDate))&" "& Year(CurrDate)%></h1>
    <table>
      <%=strWeekRow%>
      <%=strDateRow%>
      <%=strDayRow%>
    </table>

  </body>
</html>

 

Funkar fint också! Tack för hjälpen!

 

Länk till kommentar
Dela på andra webbplatser

Har ett annat problem med att trycka in värden från formulär.
Jag ska tilldela en viss användare ett visst datum ett visst projekt. 

Html koden är följande:
 

<form action="" method="post">
2022-02-10 <select name="x_project">
  <option value="0">-- Tilldela Project --</OPTION>
<option value="3|2022-02-10|26">P1019</OPTION>
<option value="4|2022-02-10|26">P1062</OPTION>
<option value="7|2022-02-10|26">P1087</OPTION>
<option value="8|2022-02-10|26">P1089</OPTION>
<option value="9|2022-02-10|26">P1092</OPTION>
<option value="31|2022-02-10|26">P1129</OPTION>
</select><br>
2022-02-11 <select name="x_project">
  <option value="0">-- Tilldela Project --</OPTION>
<option value="3|2022-02-11|26">P1019</OPTION>
<option value="4|2022-02-11|26">P1062</OPTION>
<option value="7|2022-02-11|26">P1087</OPTION>
<option value="8|2022-02-11|26">P1089</OPTION>
<option value="9|2022-02-11|26">P1092</OPTION>
<option value="10|2022-02-11|26">P1096</OPTION>
<option value="16|2022-02-11|26">P1112</OPTION>
<option value="31|2022-02-11|26">P1129</OPTION>
</select>
<input type="submit" name="addUserToProject" value="Add projects"/>
</form
<% 
 if request.form("addUserToProject")<>"" AND request.form("x_project") <> "0" then
	For Each Item In Request.Form
		fieldName = Item
		fieldValue = Request.Form(Item)
		'18|2022-02-26|8, 0, 0, 0, 0, 0, 0, 0, 0, 0
			antalArray = Split(fieldValue, "|")
			x_1=antalArray(0) 'project ID
			x_2=antalArray(1) 'Project datum
			x_3=antalArray(2) 'UserId
	Next
end if
%>


Får felet "Subscript out of range: '[number: 1]'" när jag postar in formuläret.
Vad jag vill är ju att kontrollera värden i x_1, x_2 och x_3 genom en split per inskickad formulär... 

Länk till kommentar
Dela på andra webbplatser

Du gör en split på |, men innuti en loop på olika formelement. Bland annat submitknappen. Gör istället split på det formelement som innehåller | tecknet. 

  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

2 timmar sedan, skrev .M:

Du gör en split på |, men innuti en loop på olika formelement. Bland annat submitknappen. Gör istället split på det formelement som innehåller | tecknet. 

Tackar.
Jag gjorde så här och det ger mig kontroll på samtliga fält och allt verkar funka. Tips på förbättringen tas tacksamt emot. 
1. Ändrade första tomma option till <option value="0|0|0">-- Tilldela Project --</OPTION>
2. koden nedan i sin helhet. 

if request.form("addUserToProject")<>"" AND request.form("x_project") <> "" then
	For Each Item In Request.Form("x_project")
		fieldName = Item
		fieldValue = Request.Form(Item)
		antalArray = Split(fieldName,"|",3) (fasställde till tre fält i arrays)
		if antalArray(0) <> 0 then (Vi är bara intresserade av värden som inte börjar på noll eftersom databasens id är aldrig noll.)
		x_1=antalArray(0) 'project ID
		x_2=antalArray(1) 'Project datum
		x_3=antalArray(2) 'UserId
		response.write(x_1 & ".." & x_2 & ".." & x_3 & "<hr>")
		end if
	Next
end if


 

Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...