webForumDet fria alternativet

Gruppera i en tabell

ASPur ASP

2 svar · 297 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Hej!

Jag har följande kod som består av två funktioner.

Hur gör jag för att kunna gruppera i tabellen? Säg att jag vill gruppera på kunder. Då vill jag få en tabellrad med kundens namn, under denna ska tillhörande poster listas.

Jag har testat lite med följande princip, men får det inte riktigt att fungera.

sLastGroup="###"
 
while not Rs.EOF 
    if Rs("MittFält")<>sLastGroup then 
        response.write"<tr><td colspan='xxx'>Wee!</td></tr>) 
    end if 

    sLastGroup=Rs("MittFält")

    Response.write "<tr><td>...</td><td>...</td></tr>"
wend

Mina funktioner:

function InsertContractTemplates()
		dim s, i
		dim Conn, Rs, sSQL
		dim a
		dim sTaskList, lastContract, sLastGroup

		Set Conn = CreateObject( "ADODB.Connection" )
		Conn.Open Application.sDbConnectionString
		Set Rs = CreateObject( "ADODB.Recordset" )
	
		sSQL = "SELECT "
		for i=0 to g_nCols-1
			sSQL = sSQL & g_sColField(i) & " AS FIELD_" & i & ", "
		next
		sSQL = sSQL & "[tblContract].[CustomerNr] AS CustomerNr, [tblContractTemplate].[Id] AS TemplateId, [tblContractTemplate].[StartDate], [tblContractTemplate].[StopDate]," _ 
			& " [tblContractTemplate].[RepeatUnit], [tblContractTemplate].[RepeatAmount], [tblContractTemplate].[RepeatAt], [tblContractTemplate].[DurationUnit]," _ 
			& " [tblContractTemplate].[DurationAmount], [tblContractTemplate].[StartAtMinute], [tblContractTemplate].[FixedStartDate], [tblContractTemplate].[GeneratedStopDate]," _
			& " [tblTask].[Status] AS TaskStatus, tblTask.[Id] AS TaskId, tblTask.[PlanstartDate], [tblUsers].[Sign] AS UserSign, [tblUsers].[Name] AS UserName" _
			& " FROM [tblContract]" _
			& " LEFT JOIN [tblContractTemplate]" _
			& " ON [tblContract].[Id] = [tblContractTemplate].[ContractId]" _
			& " LEFT JOIN [tblUsers]" _
			& " ON [tblContractTemplate].[User]= [tblUsers].[Name]" _
			& " LEFT JOIN tblContractTask" _
			& " ON tblContractTemplate.[Id] = tblContractTask.TemplateId" _
			& " LEFT JOIN tblTask" _
			& " ON tblContractTask.TaskId = tblTask.[Id]" _
			& " WHERE [tblContractTemplate].[ContractId] IN (" & sContractId & ")"

		if par_user<>"" then sSQL = sSQL & " AND [tblContractTemplate].[User]='" & par_user & "' "
		
		'Kunna visa typ av avtal
		if par_type<>"" then sSQL = sSQL & " AND [tblContractTemplate].[CustomT1]='" & par_type & "' "
		
		'Kunna visa endast visa 
		if par_status<>"" then sSQL = sSQL & " AND [tblTask].[Status]=" & par_status & " "
		
		sSQL = sSQL & " ORDER BY [tblContract].[CustomerNr]"
		'sSQL = sSQL & " ORDER BY [tblContract].[CustomerNr] AND " & g_sColField(0)
	
		Rs.Open sSQL, Conn, 1	

		lastContract=""
		sTaskList=""
		'sLastGroup="###"
		
		while not Rs.EOF
		
		'if Rs("CustomerNr")<>sLastGroup then 
			'Response.write "<tr><td colspan='xxx'>" & sLastGroup & "</td></tr>"
		'end if
		
		'response.write Rs("CustomerNr")
		
			if Rs("TemplateId") <> lastContract then
				
				if sTaskList<> "" then
					Rs.moveprevious
					a = split(right(sTaskList, len(sTaskList)-1), ",")
					
					s = s & InsertRow(Rs, a)
					Rs.movenext
					sTaskList=""
				end if
							
			end if
			
			sTaskList=sTaskList & "," & Rs("TaskId") & "|||" & Rs("TaskStatus") & "|||" & Rs("PlanStartDate") & "|||" & Rs("UserSign")
			
			'sLastGroup=Rs("CustomerNr") 
			lastContract=Rs("TemplateId")
			Rs.MoveNext

		wend
		
		if sTaskList<> "" then
			rs.moveprevious
			a = split(right(sTaskList, len(sTaskList)-1), ",")
			s = s & InsertRow(Rs, a)
			sTaskList=""
		end if
		
		
		Rs.Close
		Conn.Close
		set Rs=Nothing
		Set Conn=Nothing
		
		InsertContractTemplates=s
	end function

Och

function InsertRow(Rs, a)
		dim s
		dim tmDate(255)
		dim nDates
		dim m, i, j, l
		dim sOutput
		dim aTemp
		dim monthInfo(11)
		dim lTaskId, nTaskStatus, dStartDate
		dim re, tempRe
		
		set re=new regexp
		re.pattern="^\|{9}$"
		
		for i=0 to ubound(a)
			if not re.test(a(i)) then
				tempRe=re.pattern
				re.pattern="\d{4}-\d{2}-\d{2}"
				set match=re.execute(a(i))
				if match.count>0 then
					m=datepart("m", CDate(match(0)))
					monthInfo(cint(m)-1)=a(i)
				end if
				 re.pattern=tempRe
			end if	
		next
		
		set re=nothing
		
		response.write Rs("CustomerNr") & "<br>"
		s = "<tr valign='top'>"
		for i=0 to g_nCols-1
		
			s = s & "<td nowrap>" & Rs("FIELD_" & i) & "</td>"
		next
		nDates=GenerateDates(Rs, tmDate)
		
		for i=0 to g_nDateCols-1
		
			
			s = s & "<td width='35' nowrap align='center'"
			if i mod 2=0 then s = s & " bgcolor='" & g_sAltDateColor & "'"
			s = s & ">"
			if isEmpty(monthInfo(i)) then
				'Ingen ikon för denna månad
				lTaskId=-1
				nTaskStatus=-1
				dStartDate=-1
				sUserSign=-1
			else
				'gör en split på monthInfo(i) och "|||", och skicka in dem till GetTaskStatusImg
				aTemp = split (monthinfo(i), "|||")
				lTaskId=aTemp(0)
				nTaskStatus=aTemp(1)
				dStartDate=aTemp(2)
				sUserSign=aTemp(3)
			end if
			
			sOutput=""
			
			for j=0 to nDates-1		
				if DatePart("M", tmDate(j))=DatePart("M", g_tmStartDate(i)) then
					sOutput = GetCellValue(sOutput, Rs("TemplateId"), tmDate(j))
				end if
			next

			if sOutput="" then
				sOutput=GetTaskStatusImg(lTaskId, nTaskStatus, g_tmStartDate(i), dStartDate, sUserSign)
				
			end if
			s = s & sOutput
			
			s = s & "&nbsp;</td>"
		
		next
		
		s = s & "</tr>"
		InsertRow=s
	end function

Mycket tacksam för hjälp!

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#2

I while-loopen i InsertContractTemplates körs response.write som skall skriva ut kundnamnet. I variablen "s" ackumuleras samtidigt övrigt resultat. Alla response.write:s körs ju innan allt innehåll i "s", varför samtliga kundnamn skrivs ut först och därefter allt annat.

Testa med att ackumulera även

Response.write "<tr><td colspan='xxx'>" & sLastGroup & "</td></tr>"

...i "s".

devotionMedlem sedan jan. 20013 582 inlägg
#3

Såklart.... :)

Mvh
Henrik

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