Bonjour,

J'ai un datagridview lie a une base Access. Le dataset qui alimente la grid ne correspond pas a la table dans la base: pour mettre a jour les donnees, j'ai du preciser la requete pour l'update.

Cependant, l'update tente de recopier la ligne modifiee sur tous les records, au lieu d'affecter seulement les records modifies. Si je detruis les colonnes rajoutees au dataset pour que ce dernier ressemble a la table, et supprime la requete d'update, seuls les records modifies sont affectes. D'ou ma question: Comment preciser que seuls les records modifies sont a updater.

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
 
//Load the dataset and feed the grid
private void setDataGridViewList(String fundID)
        {
            try
            {
                adapterDataGrid = new OleDbDataAdapter("select ID, Date, Return, NAV, FundsManaged, StrategyAUM, BusinessAUM, Data,  Estimate, Net,GrossLong, GrossShort, GrossTotal, Vami, CumulatedReturn, LastUpdated from Performance where ID=" + fundID + " order by Date;", conn);
 
                if (myDataset.Tables["Datagrid"] != null)
                {
                    myDataset.Tables["Datagrid"].Clear();
                }
 
                adapterDataGrid.Fill(myDataset, "DataGrid");
                this.dataGridView_FundList.DataSource = myDataset.Tables["Datagrid"];
                commandBuilderDataGrid = new OleDbCommandBuilder(adapterDataGrid);
 
//Ajout de colonnes dans le Dataset...
 
}
 
//Update the DB
private void btn_Save_Click(object sender, EventArgs e)
        {
            try
            {
                this.Validate();
 
                adapterDataGrid.UpdateCommand = new OleDbCommand("Update Performance SET ID=?, [Date]=?, Return=?, FundsManaged=?, NAV=?, LastUpdated=?, StrategyAUM=?, BusinessAUM=?, Data=?, Estimate=?, Net=?, GrossLong=?, GrossShort=?, GrossTotal=?", conn);              
                adapterDataGrid.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 5, "ID");
                adapterDataGrid.UpdateCommand.Parameters.Add("Date", OleDbType.DBDate, 5, "Date");
                adapterDataGrid.UpdateCommand.Parameters.Add("Return", OleDbType.Double, 10, "Return");
                adapterDataGrid.UpdateCommand.Parameters.Add("@FundsManaged", OleDbType.Double, 10, "FundsManaged");
                adapterDataGrid.UpdateCommand.Parameters.Add("@NAV", OleDbType.Double, 10, "NAV");
                adapterDataGrid.UpdateCommand.Parameters.Add("@LastUpdated", OleDbType.DBDate, 5, "LastUpdated");
                adapterDataGrid.UpdateCommand.Parameters.Add("@StrategyAUM", OleDbType.Double, 5, "StrategyAUM");
                adapterDataGrid.UpdateCommand.Parameters.Add("@BusinessAUM", OleDbType.Double, 5, "BusinessAUM");
                adapterDataGrid.UpdateCommand.Parameters.Add("@Data", OleDbType.VarChar, 5, "Data");
                adapterDataGrid.UpdateCommand.Parameters.Add("@Estimate", OleDbType.Boolean, 5, "Estimate");
                adapterDataGrid.UpdateCommand.Parameters.Add("@Net", OleDbType.Double, 5, "Net");
                adapterDataGrid.UpdateCommand.Parameters.Add("@GrossLong", OleDbType.Double, 5, "GrossLong");
                adapterDataGrid.UpdateCommand.Parameters.Add("@GrossShort", OleDbType.Double, 5, "GrossShort");
                adapterDataGrid.UpdateCommand.Parameters.Add("@GrossTotal", OleDbType.Double, 5, "GrossTotal");
 
adapterDataGrid.Update(myDataset.Tables["DataGrid"]);
 
//...
 
}
Je rate peut etre une option par defaut que je dois preciser, ou ma methode n'est simplement pas la bonne. Avez vous une idee ?