Visualforce - 可点击的DataTable单元格 - 如何获取列和行信息

时间:2012-08-13 18:00:45

标签: datatable click visualforce

我想创建一个数据表,其中每个单元格都是可点击的。我假设我可以用apex:outputlink填充每个单元格,它可以处理可点击的部分以及每次点击都会调用我的控制器。我需要回答的一个重要问题是如何将信息传递给我的顶点控制器,以确定实际点击了哪个单元格(即:哪一行和哪一列)。

对此的任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

很容易。只需定义一个动作函数来捕获dataTable中的值:

1)首先定义三个变量,我们将传递给控制器​​:raw-id,cell-value,cell-type

public String clickedRowId { get; set; } 
public String clickedCellValue { get; set; } 
public String clickedCellType { get; set; } 

public PageReference readCellMethod(){
    System.debug('#### clickedRowId: ' + clickedRowId);
    System.debug('#### clickedCellValue: ' + clickedCellValue);
    System.debug('#### clickedCellType: ' + clickedCellType);
    return null;
}

2)其次我们创建一个动作函数,它调用我们的顶点方法传递三个变量:

<apex:actionFunction name="readCell" action="{!readCellMethod}">
    <apex:param name="P1" value="" assignTo="{!clickedRowId}"/>
    <apex:param name="P2" value="" assignTo="{!clickedCellValue}"/>
    <apex:param name="P3" value="" assignTo="{!clickedCellType}"/>
</apex:actionFunction>

3)第三,我们创建了dataTable,其中每个单元都有onClick监听器:

<apex:pageBlockTable value="{!someArray}" var="item">

    <apex:column value="{!item.name}" onclick="readCell('{!item.id}','{!item.name}','name')" />
    <apex:column value="{!item.CustomField1__c}" onclick="readCell('{!item.id}','{!item.CustomField1__c}','custom1')" />
    <apex:column value="{!item.CustomField2__c}" onclick="readCell('{!item.id}','{!item.CustomField2__c}','custom2')" />

</apex:pageBlockTable>

我们可以像任何其他JavaScript函数一样访问我们的actionFunction。如果用户点击单元格 - 将向actionFunction发送三个变量,然后发送到控制器。