2013-04-22 1 views
5

Я пытаюсь установить оператор if, чтобы проверить, была ли уже создана таблица. Я хочу создать только одну таблицу, но теперь я создаю таблицу каждый раз, когда я нажимаю кнопку, чтобы сохранить информацию. Какие-либо предложения?Проверьте, существует ли таблица с инструкцией if в 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]; 

    } 

Я пытаюсь выйти информацию, хранящуюся в XLM с DataGridView именем lagredeGjester, как видно более.

ОБНОВЛЕНО ВОПРОС:

Теперь я написал такой код:

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"); 

     } 

    } 

На моем первом запуске я вошел два разных infomations и прижала мою кнопку. Обе информации попали в ту же таблицу, что и я. Но я не могу правильно написать свое утверждение if. Когда я запускаю код выше, он работает с пустым XML (без таблиц), но пока создается таблица «Gjester», он говорит: «DataTable с именем« Gjester »уже принадлежит этому набору данных». Но разве это не означает, что должно быть предотвращено мое утверждение if? Как я писал сейчас, не следует ли добавлять информацию и не пытаться создать новую таблицу?

ответ

8

может проверить с помощью:

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

ИЛИ

if(dt.Rows.Count == 0) 

ИЛИ

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

Я пытался вам последнее предложение, но все это я получаю «Не удается неявно преобразовать тип System.Data.DataTable в BOOL» – Praise

+0

на какой альтернативе вы получили эту ошибку? – Freelancer

+0

@MariusMathisen попробовал изменить мой отредактированный последний вариант – Freelancer

2

Возможным решением было бы определить DataSet из функции. Затем проверьте количество таблиц в наборе данных.

DataSet ds = new DataSet(); 

private void InitDataTable() 
{ 
    DataTable dt; 

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

    dt = new DataTable(); 

    //your code 
} 
+0

Я все еще создаю новую таблицу. Почему dt = ds.Tables [0]? – Praise

+0

@MariusMathisen, если набор данных имеет данные, он не создаст новую таблицу. Он использует существующий. –

+0

Я обновил свой вопрос. Посмотрите, если хотите. :) – Praise

1

Вы можете также расширить набор данных, чтобы добавить метод 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

Пожалуйста, объясните больше, я помещаю этот метод внутрь функции? И что потом? – Praise

Смежные вопросы