<!--
Tbis HTML document provides a base template for Component Reference pages.

* All ??? text should be replaced.

* Examples should illustrate near real world use of the component, see other
  existing component page examples for formatting and style guidelines.
  
* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
  "property-path" syntax.
  
* Include links to Tapestry Javadoc API where appropriate.

* Include Tapestry Developers Guide multi-page version where appropriate.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- $Id$ --> 
<html>
<head>
<title>contrib:TableValues</title>
<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
</head>

<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr>
  <!-- Previous component in alphabetical order. -->
  <td align="left"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/prev.png"></a></td>  
  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
  <!-- Next component in alphabetical order. -->
  <td align="right"><a href="contrib.TableView.html"><img alt="contrib:TableView" src="common-images/next.png"></a></td>  
 <tr>
 <tr>
  <td colspan="3"><hr></td>  
 </tr>
 <tr>
  <td colspan="3">
   <table border="0" cellpadding="4" cellspacing="4" width="100%">

<tr valign="top">
 <td>
  <table>
   <tr>
    <td><font size="+2"><b>contrib:TableValues</b></font></td>
   </tr>
   <tr>
    <td>
     <A href="../api/org/apache/tapestry/contrib/table/components/TableValues.html">org.apache.tapestry.contrib.table.components.TableValues</a>
    </td>
   </tr>
  </table>
 </td>
 <td>
  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
   <tr>
    <td>Visual Component</td>
   </tr>
  </table>
 </td>
</tr>

<tr valign="center">
 <td colspan="2">&nbsp;</td>
</tr>

<tr>
 <td colspan="2">
  <b>Description</b>
  <br> 
 A low level Table component that generates the columns in the current row in the table.
 This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableRows.html"><CODE>TableRows</CODE></A>.
 
 <p>
 The component iterates over the columns in the table and 
 automatically renders the column values for the current table row. 
 The columns are wrapped in 'td' tags by default. <br>
 The column values are rendered using the renderer returned by the 
 getValueRenderer() method in <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A>.
 
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>See Also</b>
  <br>
  <A href="contrib.Table.html">Table</a>,
  <A href="contrib.TableColumns.html">TableColumns</a>, 
  <A href="contrib.TablePages.html">TablePages</a>,
  <A href="contrib.TableRows.html">TableRows</a>,
  <A href="contrib.TableView.html">TableView</a>
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>Parameters</b>
  <br>
  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
   <tr> 
    <th>Name</th>
    <th>Type</th>
    <th>Direction</th>
    <th>Required</th> 
    <th>Default</th>
    <th>Description</th>
   </tr>

 <tr>
  <td>element</td>
  <td>String</td>
  <td>in</td>
  <td>no</td>
  <td>td</td>
  <td align="left">The tag to use to wrap the column values in.</td> 
 </tr>

 <tr>
  <td>column</td>
  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A></td>
  <td>out</td>
  <td>no</td>
  <td>&nbsp;</td>
  <td align="left">The object representing the current column.</td> 
 </tr>

  </table>
  <p>
  Body: <strong>removed</strong><br>
  Informal parameters: <strong>allowed</strong><br>
  <!-- component-specification "reserved-parameter" -->
  Reserved parameters: none
  </p>    
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>Examples</b>
  <p>
  This example is under construction.
  </p>
      

 </td></tr></table>
</td></tr>
<tr>
 <td colspan="3"><hr></td>  
</tr>
<tr>
  <!-- Previous component in alphabetical order. -->
  <td align="left"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/prev.png"></a></td>  
  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
  <!-- Next component in alphabetical order. -->
  <td align="right"><a href="contrib.TableView.html"><img alt="contrib:TableView" src="common-images/next.png"></a></td>  
</tr>
</table>

</body>
</html>