|
CodingForums
Having trouble with scripting? Visit our help forum to get the answers you need.
This is a 
|
 |
Example- A multi-page Tabular Data Control
To conclude this tutorial, let's create a "multi-page" TDC
that displays 5 rows at a time, and lets the user cycle through the entire
record via links. To start things off, here's a bloated version of our
original student grades data file with a few more students and a dedicated
row to number each one. If you're wondering why I added a leading "0" to
the single digits numbers, more on that soon.
studentgrades.txt:
studentid|name|grade
~01~|~George Chiang~|~83%~
~02~|~Bill Larson~|~69%~
~03~|~Jimmy Lin~|~94%~
~04~|~Mary Miller~|~59%~
~05~|~Jane Wood~|~89%~
~06~|~Terry Gray~|~72%~
~07~|~Andrew Dart~|~82%~
~08~|~Mark Andrew~|~41%~
~09~|~Jason Beck~|~69%~
~10~|~Richard Lee~|~63%~
~11~|~Edward Lee~|~52%~
~12~|~Ben Han~|~84%~
~13~|~Kate Bert~|~73%~
~14~|~Henry Chui~|~81%~
To the HTML page now that will take this data, display the
first 5 students initially, and lets the user view the remaining records
on demand:
Student Grades HTML page:
<OBJECT ID="studentgrades" CLASSID="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="studentgrades2.txt">
<PARAM NAME="UseHeader" VALUE="TRUE">
<PARAM NAME="TextQualifier" VALUE="~">
<PARAM NAME="FieldDelim" VALUE="|">
</OBJECT>
<TABLE ID="studentrecords" DATASRC="#studentgrades" BORDER="2" style="visibility:hidden">
<THEAD>
<TH>Student ID</TH>
<TH>Name</TH>
<TH>Final Grade</TH>
</THEAD>
<TR>
<TD><SPAN DATAFLD="studentid"></SPAN></TD>
<TD><SPAN DATAFLD="name"></SPAN></TD>
<TD align="center"><SPAN DATAFLD="grade"></SPAN></TD>
</TR>
</TABLE>
<DIV ID="cyclelinks"></DIV>
<SCRIPT type="text/javascript">
var showrecords=5 //number of student records to show at once
var tdcobj=document.all.studentgrades
function gettotalrecords(){
tdcobj.recordset.moveLast() //move to end of data file
totalrecords=tdcobj.recordset.absolutePosition //get total # of records
}
function revealrecords(startingpoint){
var lowerbound=(startingpoint-1)*showrecords+1
var upperbound=lowerbound+showrecords-1
if (lowerbound<10) lowerbound="0"+lowerbound
if (upperbound<10) upperbound="0"+upperbound
var filterstring="(studentid >= "+lowerbound+") & (studentid <= "+upperbound+")"
tdcobj.Filter=filterstring
tdcobj.reset()
}
function createcyclelinks(){
var linkstocreate=Math.ceil(totalrecords/showrecords)
var linkshtml=""
for (i=1;i<=linkstocreate;i++)
linkshtml+='<a href="javascript:revealrecords('+i+')">'+i+'</a> - '
document.all.cyclelinks.innerHTML='<b>'+linkshtml+'</b>'
}
function init(){
gettotalrecords()
createcyclelinks()
revealrecords(1) //show first batch of records when page loads (1 to 5)
document.all.studentrecords.style.visibility="visible"
}
window.onload=init
</SCRIPT>
Output (screen shot for NS viewers sake):
A lot of the above is just getting the Math right, though a few points
note mentioning:
- I set the visibility property of the <table> tag to hidden initially
, so the entire record is downloaded but not visible to the user. The
entire record needs to be downloaded in order for function
gettotalrecords() to accurately retrieve the total number of rows in the
data file.
- I purposely used a leading "0" to pad single digit student numbers
in the data file. This is to overcome an apparent bug (at least in IE6)
that causes comparison of numbers to be treated as comparison of strings
instead. So a comparison like (studentnumber<5) would in fact match not
only 1 to 4, but 10-49, since these double digit numbers begin with a
number that's less than 5 as well. By padding our single digit numbers
so all numbers are 2 digits, this negates the bug.
- function revealrecords() is mainly Math, and calculates the
range of records to show (ie: 1-5, 6-10, 10 and onwards) before
constructing a filter string using it.
The above example automatically adopts to any number of records,
generating the appropriate links to cycle through them.
|