[Gtk-sharp-list] Numeric sorts in Gtk.TreeView

gtk-sharp-list.1.tracyanne at spamgourmet.com gtk-sharp-list.1.tracyanne at spamgourmet.com
Wed Aug 3 08:43:05 EDT 2005


I have the following private method in a databound Control, that I am
developing, using the GTK widgets.

My problem is in the "case "System.Decimal":" section of the code. I am
unable to find a way of setting up to pass Decimal values to the Column
in question, so that I can later sort the Column on the numerical
values. instead I am forced to pass the decimal values as Strings, which
of course then forces a String sort. The fact that I am able to pass
integer values see the "case "System.Int32":" section of the code, and
then have the TreeView widget sort on the numerical values, leads me to
assume that I should be able to pass the Decimal values. Is there a way
to do this? What am I missing?

Regards

Tracy Barlow

private Gtk.ListStore BuildListBox()
{
	Gtk.CellRendererText textCell = null;
	Gtk.CellRendererToggle toggleCell = null;
	Gtk.CellRendererPixbuf pixbufCell = null;
	
	Gtk.TreeViewColumn col = null;
	System.Type[] ColumnTypes = null;
	Gtk.ListStore store = null;
	object[] dataValues = null;
			
	IEnumerable source = DataSourceHelper.GetResolvedDataSource(dataSource,
_dataMember);
	
	int row = 0;
	foreach (object di in source)
	{
		PropertyDescriptorCollection dic = TypeDescriptor.GetProperties(di);
		dataValues = new System.Object[dic.Count];
		
		int column = 0;
		if (row == 0)
		{
			ColumnTypes = new System.Type[dic.Count];
			foreach (PropertyDescriptor dpd in dic)
			{
				Type propType = dpd.PropertyType;

				
				System.ComponentModel.TypeConverter converter =
System.ComponentModel.TypeDescriptor.GetConverter(propType);
				if (( converter != null) && converter.CanConvertTo(typeof(string)))
				{
					
					col = new Gtk.TreeViewColumn();
					col.Clicked += on_Column_Header_Clicked;
					col.Title = dpd.DisplayName;
					
					switch (propType.ToString())
					{
						case "System.String":
							textCell = new CellRendererText();
							textCell.Editable = true;
							textCell.Edited += on_Cell_Edited;			
							col.PackStart(textCell, true);
							ColumnTypes[column] = typeof(string);
							col.AddAttribute(textCell, "text", column);
							dataValues[column] = dpd.GetValue(di);	
							break;
						case "System.Int32":
							textCell = new CellRendererText();
							textCell.Editable = true;
							textCell.Edited += on_Cell_Edited;			
							col.PackStart(textCell, true);
							ColumnTypes[column] = typeof(int);
							col.AddAttribute(textCell, "text", column);
							dataValues[column] = dpd.GetValue(di);	
							break;
						case "System.Decimal":
							textCell = new CellRendererText();
							textCell.Editable = true;
							textCell.Edited += on_Cell_Edited;			
							col.PackStart(textCell, true);
							ColumnTypes[column] = typeof(string);
							col.AddAttribute(textCell, "text", column);
							dataValues[column] = dpd.GetValue(di).ToString();	
							break;
						case "System.SByte":
							toggleCell = new CellRendererToggle();
							toggleCell.Activatable = true;
							toggleCell.Toggled += on_Cell_Activated;			
							col.PackStart(toggleCell, true);
							ColumnTypes[column] = typeof(bool);
							col.AddAttribute(toggleCell, "active", column);
							dataValues[column] = ((SByte)dpd.GetValue(di) == 1);	
							break;
					}
					
					col.SortColumnId = column;
					_listBox.AppendColumn(col);
					
				}
					
				column ++;
			}

			store = new ListStore (ColumnTypes); 
		}
		else
		{
			foreach (PropertyDescriptor dpd in dic)
			{
				Type propType = dpd.PropertyType;
				
				switch (propType.ToString())
				{
					case "System.String":
						dataValues[column] = dpd.GetValue(di);	
						break;
					case "System.Int32":
						dataValues[column] = dpd.GetValue(di);	
						break;
					case "System.Decimal":
						dataValues[column] = dpd.GetValue(di).ToString();	
						break;
					case "System.SByte":
						dataValues[column] = ((SByte)dpd.GetValue(di) == 1);	
						break;
				}
				column++;
			}
		}
	
		store.AppendValues(dataValues);
		row++;
	}

return store;   
}



More information about the Gtk-sharp-list mailing list