2015-11-13 4 views
0

Я начал с простого DataTable, в котором я написал файл XML. В следующий раз, когда программа запустится, я хочу проверить, выходит ли XML-файл и читает его.C# Получение данных из DataSet

Он появляется писать XML-это хорошо, и я думаю, что чтение это хорошо, но я не могу показаться, чтобы получить какой-либо из данных в DataSet после того как я прочитал от него ..

ds.WriteXml(@"C:\Computers\config.xml"); 
if (File.Exists(@"C:\Computers\config.xml")) 
{ 
    ds.ReadXml(@"C:\Computers\config.xml"); 
    //comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); doesn't work 
    comboBox.Items.Add(ds.Tables[0].Rows.Count); //this counts 3 rows 
} 

Я получаю эта ошибка.

Необработанное исключение типа 'System.IndexOutOfRangeException' произошло в System.Data.dll

Дополнительная информация: Не удается найти столбец 1.

вот посмотрите на мой файл XML

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Table1> 
     <Name>Test1</Name> 
     <Version>1.1.1.1</Version> 
     <Code /> 
     <Location>C:\Computers\test.txt</Location> 
    </Table1> 
    <Table1> 
     <Name>test2</Name> 
     <Version /> 
     <Code /> 
     <Location /> 
    </Table1> 
    <Table1> 
     <Name>test3</Name> 
     <Version /> 
     <Code /> 
     <Location /> 
    </Table1> 
</NewDataSet>   

Я просто пытаюсь получить поле «Имя» из каждой строки, что я делаю неправильно?

+0

является 'C: \

+0

just Rickybobby

+0

Я не получаю ошибку, которую вы получаете ... – Nic

ответ

0

Я положил свой XML в C: \ компьютера и запустить код

DataSet ds =new DataSet(); 

if (File.Exists(@"C:\Computers\config.xml")) 
{ 
      ds.ReadXml(@"C:\Computers\config.xml"); 

      //comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); doesn't work 
      comboBox.Items.Add(ds.Tables[0].Rows.Count); //this counts 3 rows 
} 

comboBox.Items.Add (ds.Tables [0] .Rows [0] [0] .ToString() является Tesy1 ds.Tables [0] .Rows.Count является 3

так, я думаю, что проблема не здесь.

+0

Правильно, счет отлично работает, но если я использую код с комментариями, я не могу показаться получить фактическое значение «Test1» «Test2» или «Test3» – Rickybobby

+0

Понял, это был объем моего набора данных, по какой-то причине я поставил его наверху в своем главном окне. Изменение области действия объекта разрешило мою проблему. Не совсем понятно, почему ему не нравилось быть там, где было, но что угодно. – Rickybobby

0

проблема заключается в том, когда вы пишете

ds.WriteXml(@"C:\Computers\config.xml"); 

в первой строке он напишет новый файл и, таким образом, когда вы прочтете, в нем нет данных. Итак, теперь вы должны удалить первую строку, а затем проверить это должно быть отлично работает

if (File.Exists(@"C:\Computers\config.xml")) 
{ 
    ds.ReadXml(@"C:\Computers\config.xml"); 
    comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); //doesn't work 
    comboBox.Items.Add(ds.Tables[0].Rows.Count); //this counts 3 rows 
} 
+0

ds.WriteXml (@ "C: \ Computers \ config.xml"); только в закрытом окне Window, я только что включил это выше, чтобы люди знали, что я пишу файл по этому конкретному пути. – Rickybobby

+0

Попробуйте отладить. Поместите точку останова на ReadXML, и когда ваш курсор достигнет туда, перейдите и проверьте файл. Есть ли у него что-то для чтения. Я уверен, что вы получите ключ ... bcoz-код работает нормально. –

+0

Возможно ли, что моя структура DataTable неверна? Я опубликовал то, что он выглядит ниже – Rickybobby

0

Возможно ли DataTable не структурировано правильно?

  public DataTable predefinedPatch = new DataTable(); 

      predefinedPatch.Columns.Add("Name"); 
      predefinedPatch.Columns.Add("Version"); 
      predefinedPatch.Columns.Add("Code"); 
      predefinedPatch.Columns.Add("Location"); 
      // 
      predefinedPatch.Rows.Add("test1", "", "", ""); 
      predefinedPatch.Rows.Add("test2", "", "", ""); 
      predefinedPatch.Rows.Add("test3", "", "", ""); 
+0

Поскольку вы новичок в SO. Вы всегда можете редактировать свой вопрос, вместо того чтобы отвечать на него. –

+0

Я считаю, что когда вы пишете его в XML-файл, вы можете увидеть, структурирована ли она так, как вы показали в вопросе. Если это так, то это правильно. Если не сообщите нам, что ваш XML выглядит как –

+0

Понял, спасибо.Это был предмет объекта, у меня был он как публичный набор данных наверху в MainWindow, у него не было проблемы с написанием xml, но, я думаю, у него есть проблемы с его чтением. – Rickybobby