DataTable Элемент массива не присваивается - PullRequest
0 голосов
/ 11 февраля 2012

Я читаю в файле XML в набор данных, затем добавляю новый столбец, затем присваиваю значение каждой строке в этом столбце.

Моя программа создает новый столбец, и я вижу, что он имееттип данных BitmapImage, просматривая его на экране отладки во время его работы и используя окно сообщения для toString его типа данных.

Но когда я пытаюсь назначить что-то для столбца этой строки, он остается как «{}», и когдаЯ пытаюсь использовать его, он выдает ошибку «Невозможно привести тип DBNull к BitmapImage»;

ItemDS = new DataSet();
ItemDS.ReadXml(homeFolder + @"Items.xml", XmlReadMode.InferSchema);
ItemDS.Tables[0].Columns.Add("pic", typeof(BitmapImage));
MessageBox.Show(ItemDS.Tables[0].Columns[5].DataType.ToString());
foreach (DataRow theRow in ItemDS.Tables[0].Rows)
{
    try
    {
        theRow.ItemArray[5] = (SquareImageFromFile(NewDeployFolder + @"assets\images\items\" + theRow.ItemArray[3].ToString(), 120));
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    combItem.Items.Add(theRow.ItemArray[0]);
}

Когда я запускаю строку присваивания, ошибка не возникает, но после массива элементов ничего не происходит послелиния запущена.

1 Ответ

1 голос
/ 11 февраля 2012

Я не использовал DataTable много, но я бы ожидал, что ItemArray сделает копию данных, а не вернет "живой" массив, который отслеживает DataRow. Я бы не ожидал, что это сработает. Попробуйте просто установить значение с помощью индексатора:

theRow[5] = (SquareImageFromFile(NewDeployFolder + @"assets\images\items\" + 
                                 theRow[3].ToString(), 120));

ItemArray действительно предназначен для получения или установки значений в массе, а не для одного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...