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传输到List? theTable.Columns.List?
所有这一切的最终目的是,我想将分组添加到ListControl(ListBox,DataGrid,ListView),设置DataContext代码隐藏&amp;在XAML中绑定ItemSource。也许您可以对数据表的列表进行分组?
答案 0 :(得分:0)
您必须在某个时刻打开MySqlConnection:
conn.Open();
在ExecuteReader();
这将确保您不会获得Connection must be valid and open
例外。
答案 1 :(得分:0)
为什么不直接绑定到您正在填充的数据表?看起来你也在代码隐藏中这样做了。使用xaml会更清洁......
您可以填充数据表然后在读取器上出错的原因是datadapter可以管理自己的连接,而datareader需要显式引用连接对象。
顺便说一句。你以这种方式两次击中数据库。
答案 2 :(得分:0)
我添加了一个CollectionViewSource,其中包含一个groupDescription,我的控制项源的getdefaultview。
myView =(CollectionView)CollectionViewSource.GetDefaultView(myItemsControl.ItemsSource); PropertyGroupDescription groupDescription = new PropertyGroupDescription(“order”); myView.GroupDescriptions.Add(groupDescription);
在这里找到了这个例子: