29. oktober 2004 - 17:01Der er
13 kommentarer og 1 løsning
Fjerne constraints på datatabel i dataset?
Hej allesammen,
Der skulle vel ikke være en enkelt eller to, der ligger inde med viden om hvordan man fjerne constraints fra en DataTable, vel ??
Jeg har to tabeller med følgende relation: oDataRelation = new DataRelation("REL club-course", Form1.oDataSet.Tables["club"].Columns["id"], Form1.oDataSet.Tables["course"].Columns["club_id"]);
det virker som en lidt speciel manøvre at fjerne en constraint, men lad det nu ligge.
jeg vil anbefale dig simpelthen at oprette din relation uden at tilføje en constraint, sådan her :
oDataRelation = new DataRelation("REL club-course", Form1.oDataSet.Tables["club"].Columns["id"], Form1.oDataSet.Tables["course"].Columns["club_id"], false); // her angiver du at du ikke vil have tilføjet en constraint.
ved at det er en lidt speciel manøvre, men problemet er at jeg ikke helt anvender DataSets som de reelt skal anvendes. For når jeg skal gemme data som brugeren indstaster, gemmer jeg det direkte i mine XML-filer (arbejder med en Pocket PC app.), og jeg er derfor nød til at "indlæse" de opdaterede data fra xml-filern - igen !!
Har ikke helt styr på hvordan jeg nøjes med at indsætte dataene i selve datasetet, som så senere kan gemmes fysisk i xml'en... hmmm.. lyder det helt sort ??!
Du kan lige se hvordan jeg pt. opdaterer min DataTable (på en MEGET, MEGET kegle-agtig måde,...det tager jeg gerne på mig - men aner ikke hvad fanden jeg ellers skal gøre) ;o)
public DataTable readXML() { // Vi fjerner relationerne (hvilket vi er nød til for at kunne fjerne selve tabellen) // og selve tabellen der skal udskiftes: if(Form1.oDataSet.Relations.Contains("REL club-course")) { Form1.oDataSet.Tables.Remove("club"); Form1.oDataSet.AcceptChanges(); }
// temp-dataset - anvendes til kopiere XML-filen til en DataTabel, // som efterfølgende ligges over i en DataTable, der så returneres: DataSet ds; DataTable table; DataTableClub tableClub;
ds = new DataSet(); tableClub = new DataTableClub(); tableClub.TableName = "club";
try { // Vi opretter en fil, hvis det ikke allerede er gjort: if(!File.Exists(filename)) createXmlDocument(filename); // Se DABasis
ds.ReadXml(filename);
// Hvis tabellen ikke eksisterer, returnere // vi et den tomme tabel: if(ds.Tables.Count > 0) table = ds.Tables[0]; else return tableClub;
// Vi kopiere rækkerne fra ovenstående tabel, over // i vores egen, tableClub (for at undgå exceptions): foreach(DataRow row in table.Rows) { tableClub.ImportRow(row); }
return tableClub; } catch(Exception oException) { MessageBox.Show("Kunne ikke indlæse " +filename + " \n (DAClub, linie 150)"); throw oException; }
hmmm... jeg tror måske ikke jeg er helt med på hvorfor du skifter tabellen. hvis det er et datagrundlag der indeholder et eller andet som brugeren skal kunne opdatere ville jeg nok have noget i denne stil :
// eksisterende grundlag DataSet ds = new DataSet(); ds.ReadXml(...);
// vis det til brugeren somePresentationControl.DataSource = ds;
nu har jeg ikke hygget så meget med "lommeorgler", men et datagrid sørger selv for at kilden opdateres i forhold til brugerens indtastninger, hvorfor det eneste du så skulle i f.eks. en "save-handler" ville være :
Hmm... ville jeg ikke kun kunne bruge sådan en fremgangsmåde, hvis det netop er datagrids etc - altså komponenter der reelt er databind'et.
Min GUI består af diverse textboxe, comboboxe etx, som jeg ikke databinder på. Meeen... jeg ville jo kunne nøjes med at sætte de pågældende poster ind i en custom datatable, som jeg så ville kunne sende til min såkaldte "save handler"... eller er jeg forkert på den ?
prøver lige at kigge på ;-) men uanset hvad, så opretter jeg lige et spørgsmål til dig for din ", false" ;-) hehe... tænk at jeg har brugt så fuc... lang tid på det crap, og der så ikke skal mere til.. typisk
det var så lidt :o) du snupper bare værdierne fra dine tekstbokse med videre, og klasker dem direkte ind i det oprindelige dataset, som du så dumper når det er gjort - så skulle den være fikset.... ville det ikke kunne lade sig gøre med dit setup ? mvh /snep
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.