OS:OpenSUSE 11.4中 IDE:MonoDevelop的2.4.2 使用GTK#如何将数据从SQLite数据库显示到GTK#TreeView中?
我需要一个简单的网格视图中显示SQLite数据库的数据表,很像WindowsForms'/WPF的datagridview的,但GTK# 。 我一直在尝试配置GTK.TreeView以正确显示数据,但没有运气。数据不会显示,并在应用程序输出中出现一个模糊的错误。这里是我的代码:
Type[] types;
SqliteCommand cmd = new SqliteCommand("SELECT * FROM "+Tables.USERS, _cddapConn);
cmd.Connection.Open();
SqliteDataReader reader = cmd.ExecuteReader();
types = new Type[reader.FieldCount];
for(int i = 0; i < types.Length; i++)
types[i] = typeof(string);
Gtk.ListStore list = new Gtk.ListStore(types);
for(int i = 0; i < TblUsers.SCHEMA.Length; i++)
{
table.AppendColumn(TblUsers.SCHEMA[i], new Gtk.CellRendererText(), "text");
}
while(reader.Read())
{
String[] rowData = new String[TblUsers.SCHEMA.Length];
for(int index = 0; index < TblUsers.SCHEMA.Length; index++)
{
rowData[index] = reader.GetString(index);
table.Columns[index].AddAttribute(new Gtk.CellRendererText(), "text", index);
}
list.AppendValues(rowData);
}
table.Model = list;
reader.Close();
cmd.Connection.Close();
我遵循这里给出的例子:http://www.mono-project.com/GtkSharp_TreeView_Tutorial。 首先,我通过使用每列的数据的字符串类型初始化它来创建模型(ListStore)。然后我将数据表的列添加到树视图。然后,我参与了sqlite阅读器,并为每个条目添加其数据到模型。然后,我为每列指向数据添加一个单元格。最后,我给树视图的模型。
但是,这只能显示没有数据的列。我得到了应用程序的输出是这样的:
Gtk-CRITICAL **: gtk_tree_view_column_cell_layout_add_attribute: assertion `info != NULL' failed
我花了几个小时寻找关于这个问题没有成功的任何信息。令人惊讶的是,我没有发现树形视图在单声道中用来显示数据库中的数据或关于gtk#的任何文档的例子。
如何让我的网格视图工作?我真的只需要它显示数据并接受行选择(以便我可以检查所选行的ID列)。
啊谢谢你指出,我没有粘贴该线由于某种原因。现在修复。 – Kiril 2011-04-28 22:14:39
也许每行做一次AddAttribute而不是做一次就有问题了? – jpobst 2011-04-29 02:21:21