[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