Avatar billede hald. Nybegynder
29. oktober 2004 - 17:01 Der 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"]);

...hvor oDataSet er mit overordnede DataSet.


Jeg har prøvet med følgende:
---

Form1.oDataSet.EnforceConstraints = false;
Form1.oDataSet.Relations.Remove("REL club-course");
Form1.oDataSet.AcceptChanges();
Form1.oDataSet.Tables["club"].Constraints.Remove("Constraint1");
---

men jeg får følgende fejl:
"Cannot remove unique constraint since its the primary key of table club"

...jeg er lost ???
Avatar billede hald. Nybegynder
29. oktober 2004 - 17:13 #1
jeg er måske en smule fedtet med pointene,...så der er 30 ekstra til dagens mand i skysovs... ;-)
Avatar billede hald. Nybegynder
29. oktober 2004 - 18:06 #2
slet ingen der nørder den en fredag aften...?
Avatar billede hald. Nybegynder
29. oktober 2004 - 18:41 #3
En alternativ løsning vil også være ok... anything
Avatar billede hald. Nybegynder
29. oktober 2004 - 19:05 #4
100 Point,....kom så drenge
Avatar billede snepnet Nybegynder
29. oktober 2004 - 19:06 #5
hej hald :o)

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.

(default'er til true når den ikke angives)

mvh
Avatar billede snepnet Nybegynder
29. oktober 2004 - 19:07 #6
øj mand .... det var heldigt jeg skrev så langsomt der :oD
Avatar billede snepnet Nybegynder
29. oktober 2004 - 19:07 #7
tænk hvis jeg havde brugt 3 minutter på at skrive teksten..... så kunne jeg jo vælte mig i point :oD
Avatar billede hald. Nybegynder
29. oktober 2004 - 19:23 #8
HAHA.... ;-)

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 ??!
Avatar billede hald. Nybegynder
29. oktober 2004 - 19:25 #9
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;        
}
       
}//readXML()
Avatar billede snepnet Nybegynder
29. oktober 2004 - 19:38 #10
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 :

// opdatér kilde
ds.WriteXml(...);

mvh
Avatar billede hald. Nybegynder
29. oktober 2004 - 19:51 #11
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

Men foreløbig 1000 tak for hjælpen ;-)
Avatar billede snepnet Nybegynder
29. oktober 2004 - 20:24 #12
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
Avatar billede hald. Nybegynder
29. oktober 2004 - 20:58 #13
...joooohhhoooo prøver lige dit gude råd :-)
Avatar billede hald. Nybegynder
29. oktober 2004 - 21:00 #14
point lige ned i lommen til kongen
http://www.eksperten.dk/spm/555930
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester