I did something similar here:
Code:
public class Order
{
public virtual String OrderId { get; set; }
protected virtual Location _location { get; set; }
public static Dictionary<Decimal, Location> Locations;
public static void InitLocations()
{
IList<Location> locations = NHibernateFactory.Session.CreateQuery("from Location").List<Location>();
Locations = new Dictionary<decimal, Location>();
foreach (Location l in locations)
Locations.Add(l.LocationId, l);
}
public virtual Decimal location
{
get
{
return _location.LocationId;
}
set
{
_location = Locations[value];
}
}
}
The DataGridViewColumn was set up like this:
Code:
//
// locationDataGridViewTextBoxColumn
//
this.locationDataGridViewTextBoxColumn.DataPropertyName = "location";
this.locationDataGridViewTextBoxColumn.DataSource = this.locationBindingSource;
this.locationDataGridViewTextBoxColumn.DisplayMember = "Name";
this.locationDataGridViewTextBoxColumn.HeaderText = "location";
this.locationDataGridViewTextBoxColumn.Name = "locationDataGridViewTextBoxColumn";
this.locationDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.locationDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.locationDataGridViewTextBoxColumn.ValueMember = "LocationId";
locationBindingSource is a BindingSource using the Location Class as DataSource.
So if you change the value in the ComboBox in the Grid the Property looks up the Location in the Dictionary and passes it back.