开发者

Display lookup value based on foreign-key in bindingsource

I am looking for "best-practices" to display the value of foreign-key in a BindingSource.

Sample data开发者_Go百科:

PetID---PetName---PetTypeID
1---Tom---1
2---Jerry---2


PetTypeID---PetType
1---Cat
2---Mouse

I have a Pet class and Pet form. The following code is on the Pet form to return data from the database as a Pet collection and bind the data:

private BindingSource PetBindingSource = new BindingSource();
PetBindingSource.DataSource = Pet.GetPets();

txtPetName.DataBindings.Add(new Binding("Text", PetBindingSource, "PetName"));
txtPetType.DataBindings.Add(new Binding("Text", PetBindingSource, "PetTypeID"));

With this current example, txtPetType will show the PetTypeID (1 or 2), but I want it to display the actual value (Cat or Mouse).

So, what are some best-practices to handle something like this? Add a new property to the Pet class? Join the two tables in the stored procedure to return the value? Other options?

Note: PetName is editable, while PetTypeID will be read-only in this instance, so I'd like to rule out a combo box.

Explanations, examples, reading resources would all be much appreciated!


A facade property is the easiest option - especially if it is readonly; just add a property (in a partial class if the type is generated) that walks the relation. There are other routes, though. You can write a TypeConverter and decorate the property with it; this is a pain for generated types, though (since you can't add an attribute to a member declared in a separate partial class file). You can also use custom property models (ICustomTypeDescriptor/TypeDescriptionProvider), but these would be massively overkill just for this.

I can expand on any of these as necessary... but most (except the first) are lots of work...


Yep, like Marc said, add a PetTypeName property to the Pet class, which queries the database (or whatever, I'm assuming database) and gets the PetType record from the PetTypeID:

public class Pet { 
  ...
  public string PetTypeName { 
    get { 
      PetType pt = getPetTypeById(PetTypeID); // this method is up to you to write, of course
      return pt.Description;
    } 
  }
  ...
}

Then instead of binding to PetTypeID, bind to this new PetTypeName property.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜