The Grid doesnt have a rows collection because that would force you to move your data from your original data source to some artbitrary format like rows for the grid. In order to be flexible, there are actually several ways you can provide data to the grid, but to get started with the most simplest way, you bind your data source to the grid in a way similar to the standard ASP.NET grid.
The grid has a Data property, which you can bind your data to. Here is an example right out of the ASP.NET demo's SimpleDataGrid.aspx page:
if (Session["customers"] == null)
{
ArrayList l = new ArrayList();
l.Add(new Customer("0", "John", "Smith"));
l.Add(new Customer("1", "Mark", "Aldrin"));
l.Add(new Customer("2", "Matthew", "Jones"));
l.Add(new Customer("3", "Luke", "Kettle"));
Session["customers"] = l;
}
g.Data.provider().GetData += new Nitobi.GetDataHandler(SimpleDataGrid_GetData);
Notice the last line where I am giving my data to the grid to use. In order to use the grid you must provide the data first. That means you already have the data. Also, in your example, you are using the client side xml for the grid rather than the way it should be setup in ASP.NET. For example, the ASP.NET library doesnt put the event handles directly on the Grid element. It has a child element called GridEvents which has all the properties on it:
<ntb:Grid runat="server" id="grid"><GridEvents CellValidate="alert('validate')" /></ntb:Grid>