2013-04-22 21 views
5

Próbuję wstawić instrukcję if, aby sprawdzić, czy tabela jest już utworzona. Chcę tylko utworzyć jedną tabelę, ale tak jak teraz, tworzę tabelę za każdym razem, gdy kliknę przycisk, aby zapisać informacje. Jakieś sugestie?Sprawdź, czy istnieje tabela, jeśli instrukcja w C#?

DataTable dt; 

    private void InitDataTable() 
    { 

     if() { 

     } 

     dt = new DataTable(); 
     DataSet ds = new DataSet(); 
     ds.ReadXml("gjesteInfo.xml"); 
     ds.Tables.Add(dt); 

     DataColumn dc1 = new DataColumn("Fullt navn"); 
     DataColumn dc2 = new DataColumn("Start dato"); 
     DataColumn dc3 = new DataColumn("Antall dager"); 

     dt.Columns.Add(dc1); 
     dt.Columns.Add(dc2); 
     dt.Columns.Add(dc3); 

     dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 

     ds.Merge(dt); 

     ds.WriteXml("gjesteInfo.xml"); 

    } 



    private void lagre_Click(object sender, EventArgs e) 
    { 

     InitDataTable(); 

     gjesterutenrom.Items.Add(gjestenavnInput.Text); 

     gjestenavnInput.Text = ""; 
     datoInnsjekk.Text = ""; 
     antallDager.Text = ""; 

     DataSet onClick = new DataSet(); 
     onClick.ReadXml("gjesteInfo.xml"); 
     lagredeGjester.DataSource = onClick.Tables[0]; 

    } 

Próbuję uzyskać informacje przechowywane w XLM z DataGridView o nazwie lagredeGjester, jak widać powyżej.

aktualizowane PYTANIE:

Teraz napisał kod jak poniżej:

DataTable dt; 

    DataSet ds = new DataSet(); 

    private void InitDataTable() 
    { 


     if(ds.Tables.Contains("Gjester") ) 
     { 
      dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 
      ds.Merge(dt); 

      ds.WriteXml("gjesteInfo.xml"); 

     } 
     else { 

      dt = new DataTable("Gjester"); 

      ds.ReadXml("gjesteInfo.xml"); 
      ds.Tables.Add(dt); 

      DataColumn dc1 = new DataColumn("Fullt navn"); 
      DataColumn dc2 = new DataColumn("Start dato"); 
      DataColumn dc3 = new DataColumn("Antall dager"); 

      dt.Columns.Add(dc1); 
      dt.Columns.Add(dc2); 
      dt.Columns.Add(dc3); 

      dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 
      ds.Merge(dt); 

      ds.WriteXml("gjesteInfo.xml"); 

     } 

    } 

Na moim pierwszym uruchomieniu wszedłem dwa różne infomations i przycisnąłem przycisk. Obie informacje znalazły się w tym samym stole, co chciałem. Ale nie mogę poprawnie napisać instrukcji if. Po uruchomieniu powyższego kodu działa on z pustym XML (bez tabel), ale tak długo, jak tworzona jest tabela "Gjester", mówi "DataTable o nazwie" Gjester "już należy do tego DataSet." Ale czy nie jest to tym, co moje oświadczenie if powinno zapobiegać? Jak napisałem to teraz, czy nie wystarczy dodać informacji, a nie próbować utworzyć nowy stół?

Odpowiedz

8

może sprawdzić poprzez:

if(ds.Tables.Contains("tablename")) 

LUB

if(dt.Rows.Count == 0) 

LUB

int flag=0; 
try 
{ 

    if(ds.Tables["tablename"].Rows.Count>0) 
    { 
     // execute something 
    } 
} 
catch(Exception ex) 
{ 
flag=1; 
} 

if(flag==1) 
{ 
    messagebox.show("Table does not exists"); 
} 
+0

Próbowałem cię ostatnia sugestia, ale wszystko mogę "nie można niejawnie przekonwertować typu System.Data.DataTable do Bool" – Praise

+0

na jakiej alternatywie masz ten błąd? – Freelancer

+0

@MariusMathisen spróbować swoich edytowany ostatnią opcję – Freelancer

2

Możliwym rozwiązaniem byłoby określenie DataSet z tej funkcji. Następnie sprawdź liczbę tabel w zbiorze danych.

DataSet ds = new DataSet(); 

private void InitDataTable() 
{ 
    DataTable dt; 

    if(ds.Tables.Count > 0) 
    { 
     dt = ds.Tables[0]; 
    } 

    dt = new DataTable(); 

    //your code 
} 
+0

Nadal tworzę nowy stół. Dlaczego dt = ds.Tables [0]? – Praise

+0

@MariusMathisen, jeśli zbiór danych zawiera datatable, nie utworzy nowej tabeli. Używa istniejącego. –

+0

Zaktualizowałem moje pytanie. Spójrz, jeśli chcesz. :) – Praise

1

Można również Extend DataSet dodać metoda A FetchOrCreate()

public static DataTable FetchOrCreate(this DataSet ds, string tableName) 
    { 
     if (ds.Tables.Contains(tableName)) 
      return ds.Tables[tableName]; 
     // ------------------------------- 
     var dt = new Datatable(tableName); 
     ds.Tables.Add(dt); 
     return dt;   
    } 
+0

Proszę wyjaśnić więcej, czy umieściłem tę metodę w funkcji? I co wtedy? – Praise