On every action on DataGrid (like sort, paging, delete, ...) you must call Databind function to fill rows on DataGrid. On datagrid you MUST use some datasource.
What does it mens "synamically create" ?
If you want dinamically create columns set AutoGenerate property on DataGrid to true.
You can use DataTable created on page like DataSource and when you store it in Session you can use all DataGrid ability. (In this case you can modify Table-add rows, delete rows in session)