[Gtk-sharp-list] Dynamic from SQLite popuplated Treeview mad editable

Sebastian exit at are-you-ready.de
Thu Aug 26 06:25:39 EDT 2010


Hey Guys,

I'm writing my first gtk# Application just for learning. It should be a
simple DVD Managment Tool. I implemented a Treeview that gets its
Columns, Titles and Values dynamic from an SQLite DB. That works so far.
What I now want is a possibility to edit the Records within the
Treeview.
What I found out so far is that I make a Cell editable with the
following:
CellRendererText colr = new CellRendererText();
colr.Editable = true; 
colr.Edited += CellEdit;

But then I have no clue what to Do because I don´t have the Cellnames at
this moment. I realized that I could get the edited Text with the
args.NewText property and the Rownumber with the args.Path Property, but
I can't see how to get the Fieldname. 

Here is the Code that nakes me the treeview:

--------------------------------------------------------------
public void DisplayDataGrid(Gtk.TreeView  treeview, ListStore store,
IDataReader reader)
{
int Index;
string FieldName;
int ColumnTotal;	
		
ColumnTotal = treeview.Columns.Length;
for (Index = 0; Index < ColumnTotal; Index++)  //remove existing columns
{
Console.WriteLine("disposed: Column " + treeview.Columns[0].Title);

treeview.Columns[0].Dispose();
treeview.Columns[0] = null;
treeview.RemoveColumn(treeview.Columns[0]);
}
		
if (store != null)
{
store.Dispose();
store = null;
			
Console.WriteLine("disposed: store");
}		


TreeViewColumn tvcol = new TreeViewColumn();  
CellRendererText tcellr = new CellRendererText();
tcellr.BackgroundGdk =  new Gdk.Color(220,220,220); 
tvcol.Title = "";	
tvcol.PackStart(tcellr, true); 
tvcol.AddAttribute(tcellr, "text", 0);
treeview.AppendColumn(tvcol); 
			
for (Index = 0; Index < reader.FieldCount; Index++) //iterate through
each field of the database
{
FieldName = reader.GetName(Index); //get the query results field names
defined under strSQL
				
TreeViewColumn col = new TreeViewColumn();  // add columns for each
field
CellRendererText colr = new CellRendererText();
colr.Editable = true; //Make every single Cell editable
colr.Edited += CellEdit;
				
col.Title = FieldName;  //title the column with the field names
retrieved by the query
col.PackStart(colr, true);
col.AddAttribute(colr, "text", Index+1);
treeview.AppendColumn(col); //Add the Column to the Treeview
}
			
//create array of strings one for each column
System.Type[] Fields = new System.Type[treeview.Columns.Length]; 

for (Index = 0; Index < treeview.Columns.Length; Index++)
{
Fields[Index] = typeof(string); //set each type to string
}
			
//The ListStore is a columned list data structure to be used with
TreeView widget. 
store = new ListStore(Fields);  //initialise store with columns
treeview.Model = store; //setup treeview with store
//The TreeIter is the primary structure for accessing a tree row
TreeIter iter = new TreeIter();
//add the data from the query to the treeview
string[] FieldArray = new string[treeview.Columns.Length];
int RowCount = 0;
while(reader.Read()) //read through reach row in result set returned by
the query 
{
RowCount += 1;
FieldArray[0] = RowCount.ToString(); //first column displays the row
count
				
for (Index = 1; Index < treeview.Columns.Length; Index++)
{
FieldArray[Index] = reader.GetString(Index-1); //get the data from the
result set
FieldArray[Index] = FieldArray[Index].Trim();
				}			
iter = store.AppendValues(FieldArray); //add row to treeview
}
		



More information about the Gtk-sharp-list mailing list