Получить данные из базы данных и заполнить список - PullRequest
0 голосов
/ 22 декабря 2010
public List<Item> ListItemCollection;  

String connString = "SERVER=;" +
          "DATABASE=;" +
          "UID=;" +
          "PASSWORD=;"; 


private void GetItems()
{

String query = @"myQuery";
DataTable theTable = new DataTable();

using (MySqlConnection conn = new MySqlConnection(connString))
            {

                MySqlDataAdapter da = new MySqlDataAdapter(query, conn);
                MySqlCommand command = new MySqlCommand(query);

                da.Fill(theTable); // here all works fine.

                using (MySqlDataReader reader = command.ExecuteReader()) 
                {
                             /// At this point throws the exception .....

                    // Loop through each record.
                    while (reader.Read())  
                    {
                        ListItemCollection.Add(new Item());
                    }
                }

            }
}

theTable.Columns.Clear();
theTable.Rows.Clear();
theTable.Clear();

ListItemCollection.Items.Clear();
DataContext = ListItemCollection;
ListItemCollection.Items.Refresh();

внутреннее исключение .. {"Соединение должно быть действительным и открытым."}

Если я использую DataAdapter и заполняю dataTable "da.Fill (theTable)", все работает довольно гладко, возможноЕсть ли способ передачи данных из DataTable в список?theTable.Columns.List?

Конечная цель всего этого заключается в том, что я хочу добавить группировку в ListControl (ListBox, DataGrid, ListView), настройку DataContext code-behind & Binding ItemSource в XAML.Возможно, вы можете сгруппировать список данных?

Ответы [ 3 ]

0 голосов
/ 23 декабря 2010

почему бы не связать напрямую с данными, которые вы заполняете? похоже, что вы делаете это и в коде. Работа с xaml будет намного чище ...

причина, по которой вы можете заполнить таблицу данных и затем получить ошибку в считывающем устройстве, заключается в том, что адаптер данных может управлять своим собственным соединением, в то время как устройству чтения данных требуется явная ссылка на объект соединения.

кстати. Вы попадаете в базу данных дважды таким образом.

0 голосов
/ 23 декабря 2010

Я добавил CollectionViewSource с groupDescription, getdefaultview моего источника элементов управления.

myView = (CollectionView) CollectionViewSource.GetDefaultView (myItemsControl.ItemsSource); PropertyGroupDescription groupDescription = new PropertyGroupDescription ("заказ"); myView.GroupDescriptions.Add (groupDescription);

нашел пример здесь:

http://blogs.msdn.com/b/brunoterkaly/archive/2009/07/16/wpf-xaml-listboxes-with-a-grouping-capability.aspx

0 голосов
/ 22 декабря 2010

В какой-то момент вам придется открыть MySqlConnection:

conn.Open();

Предложить прямо перед вашим ExecuteReader();

Это гарантирует, что вы не получите исключение Connection must be valid and open.

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