/// <summary> /// Sorts by the given column index. /// </summary> /// <param name="header"></param> private void Sort(EntityListViewColumnHeader header) { if (header == null) { throw new ArgumentNullException("header"); } // property... PropertyDescriptor property = header.Property; if (property == null) { throw new ArgumentNullException("property"); } // get a comparer... IComparer comparer = null; if (property is EntityFieldPropertyDescriptor) { comparer = ((EntityFieldPropertyDescriptor)property).Field.GetComparer(Cultures.User); } else { comparer = ComparerBase.GetComparer(property.PropertyType, Cultures.User); } // check... SortOrder useOrder = SortOrder.Ascending; if (this.SortColumn == header) { if (this.Sorting == SortOrder.Ascending) { useOrder = SortOrder.Descending; } else { useOrder = SortOrder.Ascending; } } // sort... SortDirection direction = SortDirection.Ascending; if (useOrder == SortOrder.Descending) { direction = SortDirection.Descending; } this.ListViewItemSorter = new EntityListViewComparer(header, comparer, direction); this.Sorting = useOrder; _sortColumn = header; }
/// <summary> /// Constructor. /// </summary> public EntityListViewComparer(EntityListViewColumnHeader header, IComparer innerComparer, SortDirection direction) { if (header == null) { throw new ArgumentNullException("header"); } if (innerComparer == null) { throw new ArgumentNullException("innerComparer"); } _header = header; _innerComparer = innerComparer; // mbr - 2010-04-05 - removed direction... //// set... //if(this.InnerComparer is IComparerDirection) // ((IComparerDirection)this.InnerComparer).Direction = direction; }
/// <summary> /// Updates the view. /// </summary> internal void RefreshView() { // check... if (EntityListView == null) { throw new ArgumentNullException("EntityListView"); } if (Entity == null) { throw new ArgumentNullException("Entity"); } // walk the columns... this.SubItems.Clear(); for (int index = 0; index < this.EntityListView.Columns.Count; index++) { object value = null; // header... ColumnHeader header = this.EntityListView.Columns[index]; EntityListViewColumnHeader entityHeader = null; if (header is EntityListViewColumnHeader) { entityHeader = (EntityListViewColumnHeader)header; } // check... if (entityHeader == null) { throw new ArgumentNullException("entityHeader"); } if (entityHeader.Property == null) { throw new ArgumentNullException("entityHeader.Property"); } // get the value... value = entityHeader.Property.GetValue(this.Entity); // get a converter... TypeConverter converter = null; if (entityHeader.Property is EntityFieldPropertyDescriptor) { converter = ((EntityFieldPropertyDescriptor)entityHeader.Property).Field.GetConverter(); } // convert... string valueAsString = null; if (converter != null) { valueAsString = converter.ConvertToString(null, Cultures.User, value); } else { valueAsString = Convert.ToString(value, Cultures.User); } // trim... if (valueAsString == null) { valueAsString = string.Empty; } else { valueAsString = valueAsString.TrimEnd(); } // show... if (index == 0) { this.Text = valueAsString; } else { this.SubItems.Add(valueAsString); } } }