Treeview doesnt refresh upon reopenning window



Hello All,

I am looking for a fix for a Treeview issue that I am having.

I have created a Treeview that gets its data from a database and populates the list with the results of the database. This works well as even if the database table was empty (rows=0) then it still displays the headers (better than I thought).

In my example, I have a treeview on one half of the screen and the database fields showing the data on the right (table). This shows the data just wonderfully. If I add a record, or conversely if I select a record and delete it, the treeview doesnt get updated. I am calling the _show function after each time, but I dont believe that the gtk_destroy_treeview is actually doing its job. Surely it would kill the treeview, model, store, and everything with it when you kill it?

Here is the "_show" code. Of course this works fine on starting the window the first time but doesnt refresh.
I get the following message when the window tries to update:
(battlemaster:11819): Gtk-CRITICAL **: gtk_scrolled_window_add: assertion `bin->child == NULL' failed

PS: Do I need to g_free/g_object_unref the list_store or other objects before returning?


Thanks in advance.
----
void
on_monstertype_show (GtkWidget *widget, gpointer user_data)
{
gchar   *sql;
MYSQL   *conx;
MYSQL_RES *result_set;
MYSQL_ROW db_row;
MYSQL_FIELD *field;
GtkListStore *list_store;
GtkTreeModel *model;
GtkTreeIter iter;
GtkWidget *view;
GtkCellRenderer *renderer; GtkTreeSelection *selection;

gtk_widget_destroy(lookup_widget(widget, "treeview4"));
/* First, connect to the database. */
conx = mysql_init(0L);
if (conx != 0L)
{
  conx = mysql_real_connect(conx, LOCALHOST, USER, PASS, DBASE,0,0L,0);
  if (conx != 0L)
  {
sql = g_strconcat("select monsterid, creaturetype from monstertype ; ", 0L);
   if (mysql_query (conx, sql) == 0)
   {
   result_set = mysql_store_result (conx);
   // CREATE THE TREE_VIEW and hook the row selection event into it!
   view = gtk_tree_view_new();
   selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
gtk_tree_selection_set_select_function(selection, mt_selection_func, NULL, NULL);
   // CREATE COLUMN HEADERS
   // -- Column 1 --
   renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "ID", renderer, "text",
        COLUMN_ONE, NULL);
   // -- Column 2 --
   renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Type", renderer, "text", COLUMN_TWO, NULL);
   // Now Fill with the Data
   list_store = gtk_list_store_new (2,G_TYPE_STRING, G_TYPE_STRING);
   // ADD ONE ROW FOR EACH MYSQL ROW RETRIEVED
   while ((db_row = mysql_fetch_row (result_set)) != 0L)
   {
      // Display the Columns in the gtkListstore
      gtk_list_store_append (list_store, &iter);
      gtk_list_store_set (list_store, &iter,
           COLUMN_ID, db_row[0],
           COLUMN_LOCATION, db_row[1],
           -1 );
   }
   model = GTK_TREE_MODEL(list_store);
   gtk_tree_view_set_model (GTK_TREE_VIEW(view), model);
   g_object_unref (model);
gtk_container_add (GTK_CONTAINER(lookup_widget(widget, "scrolledwindow4")), view);
   gtk_widget_show_all(widget);
   mysql_close(conx);
  }
 }
}
}


--
Regards,

Jason Brisbane




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]