[c#]Probleem bij wijzigen items in dataview

Pagina: 1
Acties:

  • Skate2000
  • Registratie: November 1999
  • Laatst online: 29-12-2024
Hey allemaal, ik heb een probleem met het wijzigen van data in een dataset. Wanneer ik items uit een gefilterde of gesorteerde dataview ga wijzigen dan wijzig ik de items in de oorspronkelijke dataview. Dit klinkt misschien vreemd maar misschien legt dit eea uit :) :

Oorspronkelijke view:
Afbeeldingslocatie: http://www.rogiervandenberg.nl/temp/main1.png

Gefilterde view
Afbeeldingslocatie: http://www.rogiervandenberg.nl/temp/main2.png

Je kunt zien dat ik in het eerste scherm 3 rijen heb. Wanneer ik nu de 2e wil editen, gaat dit prima. Als ik echter sorteer of filter, en daarna bijvoorbeeld nummer 2 aanpas, dan wijzigt hij dit op de 1ste regel van de oorspronkelijke view.. :?

code uit de dbConnect class
code:
1
2
3
4
5
6
7
8
9
10
11
12
cn = new SQLiteConnection("Data Source=db.db;Version=3");

//Create DataSet
ds = new DataSet();

//Fill the DataSet with Klanten         
da1 = new SQLiteDataAdapter("SELECT * FROM klanten ORDER BY tussenvoegsel",cn);
da1.TableMappings.Add("Table","klanten");
da1.Fill(ds);

commandBuilder = new SQLiteCommandBuilder(da1);
dsView = ds.DefaultViewManager;


Constructor van klanten.cs
code:
1
2
3
4
5
6
7
8
dbCon                       = new DbConnectNew();
grdKlanten.DataSource       = dbCon.dsView;
grdKlanten.DataMember       = "klanten";

cmKlanten       = (CurrencyManager)this.BindingContext[grdKlanten.DataSource, grdKlanten.DataMember];      
((DataView)cmKlanten.List).AllowNew = false;
((DataView)cmKlanten.List).AllowEdit = false;
((DataView)cmKlanten.List).AllowDelete = false;


Wijzig code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DataRow myRow;
myRow = dbCon.dsView.DataSet.Tables["klanten"].Rows[cmKlanten.Position];
myRow.BeginEdit();
myRow["voornaam"]       = txtBoxVoornaamWijzig.Text;
myRow["tussenvoegsel"]  = txtBoxTussenvoegselWijzig.Text;
myRow["achternaam"]     = txtBoxAchternaamWijzig.Text;
myRow.EndEdit();
            
dbCon.cn.Open();

int rowsAffected = 0;
modifiedRows = dbCon.dsView.DataSet.Tables["klanten"].DataSet.GetChanges(System.Data.DataRowState.Modified);
if (((modifiedRows) != (null))) 
{
    rowsAffected = dbCon.da1.Update(modifiedRows,"klanten");
}

dbCon.cn.Close();
dbCon.dsView.DataSet.AcceptChanges();


Is er iemand die me hiermee zou kunnen helpen? Ik ben al een paar dagen bezig, maar krijg het niet voor elkaar.. :'(

[ Voor 17% gewijzigd door Skate2000 op 27-10-2004 11:15 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
Tja, dat is niet moelilijk hoe het komt.
Je werkt met de positie van de huidige row.
Je moet ook beseffen dat je die wijzingen doorvoert in de achterliggende datatable. Je gaat dus een bepaalde row gaan aanspreken in die datatable adhv de positie waarop je ze ziet in je dataview. Dat gaat natuurlijk verkeerd. Positie 1 in je dataview is niet noodzakellijk de row die je in je datatable hebt op positie 1.
Je zult dus je datarow moeten ophalen adhv de Primary Key, en dan die row wijzigen.

code:
1
2
DataRow dr  = myTable. Rows.Find ("PrimaryKeyFieldName=" + primaryKeyOfWantedRow.ToString());
// wijzig dr hier.

https://fgheysels.github.io/


Verwijderd

Whoami,

Dit topic had een vriend van mij geplaats op tweakers.net we werken samen aan dit project en hebben morgen een deadline jammer genoeg. Ik heb het gevoel dat ik er bijna ben, maar net het laatste dingetje mis. De optie die jij aangeeft had ik ook al geprobeerd alleen helaas zonder succes :(. Ik krijg een
exception:
Additional information: Table doesn't have a primary key.

Terwijl de table wel een primary key heeft?? Moet je soms nog ergens aangeven dat hij primary key is?? Heb dit al geprobeert->

ds.Tables["klanten"].Columns["klant_id"].Unique = true;

command = new SQLiteCommand("CREATE TABLE klanten (klant_id INTEGER PRIMARY KEY, voornaam VARCHAR(255), tussenvoegsel VARCHAR(255), achternaam VARCHAR(255))",cn);

command.ExecuteNonQuery();

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
De table in je databank heeft wel een primary key, maar je DataTable (ds.Tables["Klanten"] (ADO.NET) niet. Kijk eens naar de PrimaryKey property van de datatable.

https://fgheysels.github.io/


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Ik begrijp trouwens niet waarom je niet werkt met databainding op je textboxen rechts, dan is al die update stuff niet nodig...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
D4Skunk schreef op 28 oktober 2004 @ 09:06:
Ik begrijp trouwens niet waarom je niet werkt met databainding op je textboxen rechts, dan is al die update stuff niet nodig...
Da's inderdaad waar. Databinden met het geselecteerde item zou een hele hoop stuff die je anders zelf moet regelen van je afnemen.

https://fgheysels.github.io/


Verwijderd

Thx voor de reacties het is allemaal voor mekaar :)
Pagina: 1