Question: I have my own customized freemarker template storage configured over freemarker, it is working fine.

Recently I want to make some changes on the cache management, I need to read the properties from the cache key which is typeof "TemplateKey". Unfortunately the "TemplateKey" is "private final static class". I have no access to this class and I cannot cast the Key object back into TemplateKey object.

I see the simplest way is to make source code change in TemplateCache.java to update the TemplateKey to be expose as public class.

Question to Freemarker designer: Is it any special reason to make this TemplateKey not be exposed? Is it possible to expose it in next build? 

Thanks.

Rocky

Answer: 
As you know, the Grid View has multiple rows. So you can get the values from any of the rows.

Getting it using the Data Keys:

```
var ponumber = GridView1.DataKeys[rowIndex].Values[0].ToString();
var sitename = GridView1.DataKeys[rowIndex].Values[1].ToString();

```

Getting it by cells:

```
// easiest way, but not the most recommended.
var ponumber = GridView1.Rows[rowIndex].Cells[0].Text; // try 0 or 1

```

you can also get the data in the Row Data Bound Event:

```
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
     if(e.Row.RowType == DataControlRowType.DataRow)
     {
       var ponumber = GridView1.DataKeys[e.Row.RowIndex].Values[0].ToString();
       var sitename = GridView1.DataKeys[e.Row.RowIndex].Values[1].ToString();
     }
}

```
```
foreach (GridViewRow gr in userGrid.Rows)
{
    CheckBox check = (CheckBox)gr.FindControl("chkSelect");
    if (check.Checked == true)
    {
        string order = userGrid.Rows[gr.RowIndex].Cells[3].Text;
        gl.updatetracking (order);
    }
}

```