Bonjour,

Novice en C#, je cherche actuellement a crée un tableau (datagrid) dans lequel j'importe des donnée Sql que je souhaite modifié via une textbox.
La mise en place du tableau et l'import des donnée est bon.

Mais je cherche maintenant a validé tous les changement via un bouton.

Je me suis grandement inspiré (casi copié )de http://msdn.microsoft.com/fr-fr/library/aa992036.aspx

Le problème vient de :

System.Data.DataRow row =
originalDataTable.Select(String.Format("A = {0}", currentA))[0];


Après pas mal de recherche et de prise de tête je n'ai toujours pas compris comment l'utiliser.

Il y a une histoire de valeur nul mais je ne comprend pas le fonctionnement.

("A = {0}", currentID))[0] 0 pas 0 ? qu'elle doit être la valeur ?
le {} est la pour le cas ou ma colonne clé ne correspond a rien ?

J'envoie tous mon code, dsl pour le pavé.

Aspx.cs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
 
 
 
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
 
    protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        GridView1.DataBind();
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
 
    }
 
    private bool tableCopied = false;
    private System.Data.DataTable originalDataTable;
 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
 
        if (e.Row.RowType == DataControlRowType.DataRow)
            if (!tableCopied)
            {
                originalDataTable = ((System.Data.DataRowView)e.Row.DataItem).Row.Table.Copy();
                ViewState["originalValuesDataTable"] = originalDataTable;
                tableCopied = true;
            }
    }
 
    protected void UpdateButton_Click(object sender, EventArgs e)
    {
        originalDataTable = (System.Data.DataTable)ViewState["originalValuesDataTable"];
 
        foreach (GridViewRow r in GridView1.Rows)
            if (IsRowModified(r)) { GridView1.UpdateRow(r.RowIndex, false); }
 
        // Rebind the Grid to repopulate the original values table.
        tableCopied = false;
        GridView1.DataBind();
    }
    protected bool IsRowModified(GridViewRow r)
    {
        int currentA;
        string currentB;
 
 
        currentA = Convert.ToInt32(GridView1.DataKeys[r.RowIndex].Value);
 
        currentB = ((TextBox)r.FindControl("Lasttextbox1")).Text;
 
 
        System.Data.DataRow row =
originalDataTable.Select(String.Format("A = {0}", currentA))[0];
 
 
        if (!currentB.Equals(row["B"].ToString())) { return true; }
 
 
        return false;
    }
 
}
Aspx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="realtest.aspx.cs" Inherits="realtest" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
 
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:PRD_DWHConnectionString %>" 
            updatecommand="UPDATE [VINCENT] SET [B] = @B"
            insertcommand="INSERT INTO [VINCENT] ([B]) VALUES (@B)"
            SelectCommand="SELECT [A], [B] FROM [VINCENT]">
           <DeleteParameters>
           <asp:parameter Name="A" type="Int32" />
           </DeleteParameters>
            <updateParameters>
            <asp:parameter Name="A" type="Int32" />
            <asp:parameter Name="B" type="String" />
            </updateParameters>
            <InsertParameters>
            <asp:Parameter Name="B" Type="String" />
            </InsertParameters>
 
            </asp:SqlDataSource>
       <asp:GridView ID="GridView1" runat="server" 
            AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="A" 
            DataSourceID="SqlDataSource1">
            <Columns>
 
 
                  <asp:BoundField DataField="A" HeaderText="A" ReadOnly="True" 
                    SortExpression="A" />
 
                <asp:TemplateField HeaderText="B" SortExpression="B">
                <EditItemTemplate>
                <asp:TextBox ID="textbox1" runat="server" Text='<%# Bind("B") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                <asp:TextBox ID="Lasttextbox1" runat="server"  MaxLength="20" Text='<%# Bind("B") %>'></asp:TextBox>
                </ItemTemplate>
                </asp:TemplateField>
 
 
            </Columns>
        </asp:GridView>
        <asp:Button ID="Updatebutton" runat="server" onclick="UpdateButton_Click" Text="Update" />
 
    </div>
    </form>
</body>
</html>
Un petit visu de la table,

http://www.hostingpics.net/viewer.php?id=304999noob.png

et de mon cher petit message d'erreur

http://hpics.li/92ac4df

En vous remerciant par avance.

Bonne journée