Here is some code the demonstrates the two things you are looking to do...
1 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
2 Dim d As New DataSet1.DataTable1DataTable
3 d.AddDataTable1Row("Test1", "RemoveMe")
4
5 Dim d2 As Data.DataTable = d.Copy
6
7 d2.Columns.Remove("RemoveMe")
8
9 With Me.GridView1
10 .DataSource = d2
11 .DataBind()
12 If .HeaderRow IsNot Nothing Then
13 .HeaderRow.Cells(d2.Columns.IndexOf("Test1")).Text = "New Title"
14 End If
15 End With
16
17 End Sub
To answer you second question, look at lines 5 and 7. Make a copy of your data table (line 5) and then remove the columns you do not want (line 7). When the gridview databinds it will not inlcude those columns.
To answer your second question, look at lines 12 and 13 . Make sure you have a header row (you may not if you do not have data, line 12) first. If you do, go to the cell (column) you care about it and change it's text (line 13). If you want to reference it by name, as I do in the example, use the modifed datatable and searching for ordinal value of the column using the IndexOf method of the columns collection.
Failure is always an option. Avoid situations where it is the only option.