Добавьте двух массивов в таблицу данных - PullRequest
2 голосов
/ 15 декабря 2009

У меня есть два arraylists. Один содержит имена файлов, а другой содержит количество ошибок. Эти значения взяты из таблиц базы данных в коде позади.

Теперь я хочу добавить эти два массива в один. Есть ли способ сделать это?

Ответы [ 3 ]

3 голосов
/ 15 декабря 2009

Так много вещей здесь не так. Во-первых, конечно, для .Net 2.0 и более поздних версий вы должны , а не использовать ArrayLists больше. Вместо этого используйте общие List<T> s. Во-вторых, и что не менее важно, лучший способ перевести их в один и тот же набор данных - переписать sql, который вы использовали для их генерации, чтобы вместо двух запросов у вас был только один. Наконец, вы не поделились кодом. Как мы можем помочь вам решить вашу проблему, если мы не видим код, который вы используете?

1 голос
/ 15 декабря 2009

Предоставленная вами информация довольно ограничена, поэтому «я сделаю здесь дикое предположение.

var table = new DataTable();
table.Columns.Add("value1");
table.Columns.Add("value2");

for (int i = 0; i < arrayListOne.Count; i++)
{
    var row = table.NewRow();
    row["value1"] = arrayListOne[i];
    row["value2"] = arrayListTwo[i];
    table.Rows.Add(row);
}

Конечно, это будет работать, только если оба списка имеют одинаковую длину.

Если это не то, что вам нужно, вам нужно будет добавить дополнительную информацию.

0 голосов
/ 15 декабря 2009

Да, есть много способов добавить два экземпляра ArrayList в один экземпляр DataTable. Вот один из способов, который показывает, как добавить любое количество ArrayLists в один DataTable, используя полный пример кода, скомпилированный в .NET Framework 2.0.

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

Это действительно не сложный ответ - он просто устанавливает сначала пару экземпляров ArrayList с примерами данных, относящихся к вашему вопросу, и в конце предоставляет фрагмент для проверки решения.

Пожалуйста, прокомментируйте, какие идеи вы найдете здесь, если таковые имеются. Спасибо.

namespace Com.StackOverflow {

    using System.Diagnostics;
    using System.Data;
    using System.Collections;

    public static class SOQuestion__Add_two_arraylists_in_a_datatable {

        public static void AnswerQuestionDirectly() {

            // - - - - - - - - Prelimary setup to question - - - - - - - -

            // Sample list of filenames (3 elements in total).
            ArrayList listFilenames = new ArrayList( new[] {@"C:\a.dat", @"C:\b.dat", @"C:\c.dat"} );

            // Sample list of error counts (2 elements in total).
            ArrayList listFailureCounts = new ArrayList( new[] {88,51} );

            // - - - - - - A Direct answer to the question - - - - - - -

            // Create DataTable structure with one column.
            DataTable dTable = new DataTable();
            dTable.Columns.Add("Column 1");

            /* Populate DataTable with all lists at once. 
             * Note: keep appending 
             * to { array initialization list } all lists you want included
             * in the DataTable instance.
             */
            foreach (ArrayList currentList in new[] { listFilenames, listFailureCounts }) {
                foreach (object element in currentList)
                    dTable.Rows.Add(new[] { element }); // one column per row
            }

            // - - - - - - - - Test it for expected counts - - - - - - - -

            int totalExpected = listFilenames.Count + listFailureCounts.Count;
            //Verify DataTable contains the same amount of rows.
            Debug.Assert(dTable.Rows.Count == totalExpected);
        }
    }
}

Приведенный выше ответ можно скопировать и вставить в файл .cs и запустить со следующим кодом: using Com.StackOverflow;.

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