page HTML ressemblez,
<asp:GridView ID="Grid1" runat="server" AutoGenerateColumns="False" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%#Bind("ID") %>' CssClass="rowHeader"></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txt1" runat="server" Text='<%#Bind("ID") %>'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="txt" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txt2" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:Label ID="Comments" runat="server" Text='<%#Bind("Comments") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="Drop1" runat="server">
<asp:ListItem>v1</asp:ListItem>
<asp:ListItem>v2</asp:ListItem>
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnAdd" runat="server" Text="Add" />
<asp:Button ID="btnSave" runat="server" Text="Save" />
sur chargement de la page,
conn = Nouveau OleDb.OleDbConnection ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = D: \ GDD_Work \ Employee.mdb ")
If Not Page.IsPostBack Then
ViewState("intCount") = 0
Session("blnFlag") = False
Dim Cmd As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
Cmd.Fill(ds, "Employee")
Grid1.DataSource = ds.Tables("Employee")
Grid1.DataBind()
Session("intOldCount") = ds.Tables("Employee").Rows.Count
Session("tempTable") = ds.Tables("Employee")
sur le bouton Ajouter clic,
Si session (" blnFlag ") = False Then session ("blnFlag") = Vrai Else getFooter() End If
Grid1.FooterRow.Visible = True
sur bouton Enregistrer clic,
Dim intOldCount As Integer Dim intNewCount As Integer Dim dt As New DataTable Dim strQuery As String intOldCount = CType (Session ("intOldCount"), Entier) Si Session ("blnFlag") = Vrai Alors
getFooter()
dt = CType(Session("tempTable"), DataTable)
intNewCount = dt.Rows.Count
If intOldCount = intNewCount Then
Dim tx1 As TextBox
Dim tx2 As TextBox
Dim drp As DropDownList
tx1 = CType(Grid1.FooterRow.FindControl("txt1"), TextBox)
tx2 = CType(Grid1.FooterRow.FindControl("txt2"), TextBox)
drp = CType(Grid1.FooterRow.FindControl("Drop1"), DropDownList)
strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + tx1.Text + "','" + tx2.Text + "','" + drp.SelectedValue + "')"
Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd.ExecuteNonQuery()
conn.Close()
Else
For i = intOldCount To intNewCount - 1
Dim strId As String
Dim strDesc As String
Dim strComm As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strComm = dt.Rows(i)(2).ToString()
strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + strId + "','" + strDesc + "','" + strComm + "')"
Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd.ExecuteNonQuery()
conn.Close()
Next
End If
For i = 0 To intOldCount - 1
Dim strId As String
Dim strDesc As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"
Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd1.ExecuteNonQuery()
conn.Close()
Next
ds = New DataSet()
Dim CmdData As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
CmdData.Fill(ds, "Employee")
Grid1.DataSource = ds.Tables("Employee").DefaultView
Grid1.DataBind()
Session("blnFlag") = False
Else
dt = CType(Session("tempTable"), DataTable)
i = 0
For Each rows As GridViewRow In Grid1.Rows
Dim txt As TextBox
txt = CType(rows.FindControl("txt"), TextBox)
dt.Rows(i)(1) = txt.Text
i = i + 1
Next
Session("tempTable") = dt
For i = 0 To intOldCount - 1
Dim strId As String
Dim strDesc As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"
Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd1.ExecuteNonQuery()
conn.Close()
Next
Grid1.DataSource = dt.DefaultView
Grid1.DataBind()
End If
im en utilisant une fonction similaire,
Fonction publique getFooter() Dim TX1 Comme TextBox Dim tx2 Comme TextBox Dim DRP Comme DropDownList TX1 = CType (Grid1.FooterRow.FindControl ("txt1"), TextBox) tx2 = CType (Grid1.FooterRow.FindControl ("txt2"), TextBox) drp = CType (Grid1.FooterRow.FindControl (« Drop1 »), DropDownList)
Dim dr As DataRow
Dim dt As DataTable
dt = CType(Session("tempTable"), DataTable)
dr = dt.NewRow()
dr("ID") = tx1.Text
dr("Description") = tx2.Text
dr("Comments") = drp.SelectedValue
dt.Rows.Add(dr)
i = 0
For Each rows As GridViewRow In Grid1.Rows
Dim txt As TextBox
txt = CType(rows.FindControl("txt"), TextBox)
dt.Rows(i)(1) = txt.Text
i = i + 1
Next
Grid1.DataSource = dt.DefaultView
Grid1.DataBind()
Session("tempTable") = dt
End Function
Salut Sergiu Damian je compris ce que vous avez dit ... mais je ne sais pas comment la obtenir des données d'une manière bidirectionnelle ... pouvez-vous me dire s'il vous plaît avec un exemple? – sona
Vous pouvez lier des données à un GridView, vous pouvez modifier un enregistrement à la fois. Fondamentalement, après que chaque ligne a été éditée, elle doit être sauvegardée avant de pouvoir éditer une autre ligne. Un bon point de départ: http://msdn.microsoft.com/en-us/magazine/cc163933.aspx –
salut ... Actuellement dans ma table im ayant 3 lignes .. de cette 1ère colonne est une zone de texte, donc je peux éditer toutes les trois lignes avant que le bouton sauvegarder ne clique ... le lien que vous envoyez est seulement pour éditer une ligne à la fois ... merci pour votre temps ... j'ai corrigé cela en utilisant deux sessions ... – sona