Let me explain.
I have a grid which is made like that:
| <td valign=bottom> | 
| <telerik:RadGrid | 
| ID="RadGrid2" | 
| Skin="Vista" | 
| runat="server" | 
| OnNeedDataSource="RadGrid2_NeedDataSource" | 
| ShowFooter=true | 
| CommandItemStyle-HorizontalAlign=Center> | 
| <MasterTableView | 
| ShowFooter=true | 
| CommandItemDisplay="bottom" | 
| EditMode="InPlace" > | 
| <CommandItemTemplate> | 
| <asp:LinkButton ID="LinkButton1" CommandName="UpdateChanges" Runat="server" CssClass="TexteBlanc16">Importer tous</asp:LinkButton> | 
| </CommandItemTemplate> | 
| <Columns> | 
| <telerik:GridTemplateColumn UniqueName="CodePermanent" HeaderText="Code Permanent"> | 
| <ItemTemplate> | 
| <asp:TextBox ID="TxtCodePermanent" runat="server"></asp:TextBox> | 
| </ItemTemplate> | 
| </telerik:GridTemplateColumn> | 
| </Columns> | 
| </MasterTableView> | 
| </telerik:RadGrid> | 
| </td> | 
| <td valign=bottom> | 
| <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Ajouter une ligne" /> | 
| </td> | 
| Public Sub RadGrid2_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) | 
| If Not IsPostBack Then | 
| dt = AddRow(dt) | 
| ' call the method to create row | 
| ViewState("dt") = dt | 
| End If | 
| dt = DirectCast(ViewState("dt"), DataTable) | 
| RadGrid2.DataSource = dt | 
| End Sub | 
| Private Function AddRow(ByVal dt As DataTable) As DataTable | 
| ' method to create row | 
| Dim dr As DataRow = dt.NewRow() | 
| dr("RowNumber") = "" | 
| dt.Rows.Add(dr) | 
| Return dt | 
| End Function | 
| Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) | 
| Dim countitem As Integer | 
| Dim dt As DataTable = DirectCast(ViewState("dt"), DataTable) | 
| countitem = RadGrid2.Items.Count | 
| Dim cpt As Integer = 0 | 
| For Each Item As GridDataItem In RadGrid2.Items | 
| Dim txtcode As TextBox = DirectCast(Item("CodePermanent").FindControl("TxtCodePermanent"), TextBox) | 
| If Not (txtcode.Text Is Nothing) And txtcode.Text <> "" Then | 
| liste.Add(txtcode.Text) | 
| End If | 
| Next | 
| ViewState("dt") = AddRow(dt) | 
| listcount = liste.Count | 
| RadGrid2.Rebind() | 
| While cpt < listcount | 
| Dim txtcode As TextBox = DirectCast(RadGrid2.Items(cpt)("CodePermanent").FindControl("TxtCodePermanent"), TextBox) | 
| txtcode.Text = liste.Item(cpt) | 
| cptcpt = cpt + 1 | 
| End While | 
| End Sub | 
| Public Sub RadGrid2_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid2.ItemCommand | 
| If e.CommandName = "UpdateChanges" Then | 
| For Each Item As GridDataItem In RadGrid2.Items | 
| Dim txtcode As TextBox = DirectCast(Item("CodePermanent").FindControl("TxtCodePermanent"), TextBox) | 
| If Not (txtcode.Text Is Nothing) Then | 
| ImporterEtudiants(txtcode.Text) | 
| End If | 
| Next | 
| Me.RadGrid_BanqueCV.Rebind() | 
| If CodePermInvalide <> "" Then | 
| Session("sCodePermInvalide") = CodePermInvalide | 
| Response.Redirect("FEN_ERREUR.aspx?NoErreur=3") | 
| End If | 
| End If | 
| End Sub | 
| Public Function ImporterEtudiants(ByVal sCodePerm As String) As Boolean | 
| Dim strSQLIdent As String | 
| Dim cmdIdent As New SqlCommand | 
| Dim myDAIdent As New SqlDataAdapter | 
| Dim dsIdent As New DataSet | 
| Dim strSQLIdentValide As String | 
| Dim cmdIdentValide As New SqlCommand | 
| Dim myDAIdentValide As New SqlDataAdapter | 
| Dim dsIdentValide As New DataSet | 
| Dim strSQLIdentInsert As String | 
| Dim cmdIdentInsert As New SqlCommand | 
| Dim myDAIdentInsert As New SqlDataAdapter | 
| Dim dsIdentInsert As New DataSet | 
| Dim DatedeNaissance As Date | 
| strSQLIdentValide = "SELECT * FROM T_USAGER WHERE CODE_PERMANENT ='" & sCodePerm & "'" | 
| cmdIdentValide = New SqlCommand(strSQLIdentValide, Conn) | 
| myDAIdentValide = New SqlDataAdapter(cmdIdentValide) | 
| Conn.Open() | 
| myDAIdentValide.Fill(dsIdentValide) | 
| Conn.Close() | 
| If dsIdentValide.Tables(0).Rows.Count > 0 Then 'L'usager existe déjà dans la table T_USAGER | 
| Effacer = 1 | 
| Return True | 
| Else | 
| strSQLIdent = "SELECT E_Ele.Fiche,CodePerm,DateNaiss,Nom,Pnom,NoCiv,Rue,Ville,CodePost,IndReg,Tel " & _ | 
| "FROM E_Ele " & _ | 
| "INNER JOIN E_Adr " & _ | 
| "ON E_Ele.Fiche = E_Adr.Fiche " & _ | 
| "INNER JOIN E_Freq ON E_Ele.Fiche = E_Freq.Fiche " & _ | 
| "GROUP BY E_Ele.Fiche, E_Ele.CodePerm, E_Ele.DateNaiss, E_Ele.Nom, E_Ele.Pnom, E_Adr.NoCiv, E_Adr.Rue, E_Adr.Ville, E_Adr.CodePost, E_Adr.IndReg, E_Adr.Tel, E_Adr.DateFin, E_Adr.EnvoiMeq " & _ | 
| "HAVING (((Max(E_Freq.DateFin))>'2008-01-01') AND ((E_Adr.DateFin)='') AND ((E_Adr.EnvoiMeq)='1')) AND CodePerm='" & sCodePerm & "'" | 
| cmdIdent = New SqlCommand(strSQLIdent, ConnJadeAdulte) | 
| myDAIdent = New SqlDataAdapter(cmdIdent) | 
| ConnJadeAdulte.Open() | 
| myDAIdent.Fill(dsIdent) | 
| ConnJadeAdulte.Close() | 
| If dsIdent.Tables(0).Rows.Count > 0 Then | 
| DatedeNaissance = Left(dsIdent.Tables(0).Rows(0).Item("DateNaiss"), 4) & "-" & Mid(dsIdent.Tables(0).Rows(0).Item("DateNaiss"), 5, 2) & "-" & Right(dsIdent.Tables(0).Rows(0).Item("DateNaiss"), 2) | 
| strSQLIdentInsert = "INSERT INTO T_USAGER (CODE_PERMANENT,MOT_PASSE,PRENOM,NOM,ADRESSE,VILLE,CODE_POSTAL,NO_TEL,COURRIEL,DATE_NAISSANCE,LETTRE_CONSENTEMENT,RECEVOIR_NOUVELLE_OFFRE,DIPLOME, PREMIERE_FOIS) " & _ | 
| "VALUES ('" & sCodePerm & "'," & dsIdent.Tables(0).Rows(0).Item("DateNaiss") & ",'" & Replace(Trim(dsIdent.Tables(0).Rows(0).Item("Pnom")), ",", "''") & "', '" & Replace(Trim(dsIdent.Tables(0).Rows(0).Item("Nom")), "'", "''") & "','" & Replace(Trim(dsIdent.Tables(0).Rows(0).Item("NoCiv")), "'", "''") & " " & Replace(Trim(dsIdent.Tables(0).Rows(0).Item("Rue")), "'", "''") & "','" & Replace(Trim(dsIdent.Tables(0).Rows(0).Item("Ville")), "'", "''") & "','" & dsIdent.Tables(0).Rows(0).Item("CodePost") & "','" & dsIdent.Tables(0).Rows(0).Item("IndReg") & dsIdent.Tables(0).Rows(0).Item("Tel") & "','','" & DatedeNaissance & "',0,0,0,1)" | 
| cmdIdentInsert = New SqlCommand(strSQLIdentInsert, Conn) | 
| myDAIdentInsert = New SqlDataAdapter(cmdIdentInsert) | 
| Conn.Open() | 
| myDAIdentInsert.Fill(dsIdentInsert) | 
| Conn.Close() | 
| Effacer = 1 | 
| Return True | 
| Else | 
| If CodePermInvalide = "" Then | 
| CodePermInvalide = sCodePerm | 
| Else | 
| CodePermInvalideCodePermInvalide = CodePermInvalide & " <br> " & sCodePerm | 
| End If | 
| Effacer = 0 | 
| Return False | 
| End If | 
| End If | 
| End Function | 
| Private Sub RadGrid2_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadGrid2.PreRender | 
| RadGrid2.MasterTableView.RenderColumns(1).Display = False | 
| RadGrid2.MasterTableView.RenderColumns(3).Display = False | 
| End Sub | 
| <A HREF="Javascript:history.go(-1)" >Retour</a> | 
Hope that make sense. If you need more informations, please be free to ask as I don't know if I'm clear enought.
Thank you!

