
BindingSource & .NetTiers
March 13, 2008Tak jsem dlouhou dobu řešil, proč tento kód neprocházel:
public void Bind(Flight flight)
{
if (!DesignMode)
{
this._flight = flight;
bsAirport.DataSource = WcfClient.CodeTables.AirportCodeTable.Instance;
bsFlightType.DataSource = WcfClient.CodeTables.FlightTypeCodeTable.Instance;
bsFlightSpecification.DataSource = WcfClient.CodeTables.FlightSpecificationCodeTable.Instance;
bsFlight.DataSource = flight;
}
}
konkrétně docházelo k tomu, že:
bsFlight.DataSource = flight;
vůbec neplnil formulář daty. Kde je problém??
Flight je totiž .NetTiers Entita. Pokud na něm voláme operátor “=” , pak, automaticky vol8 metodu Clone(), kvůli bezpečnosti. Pokud jsem zkopíroval flight do _flight (a myslel jsem, že předávám jen referenci), tak došlo k vytvoření nové instance. Tato nová instance ale nebyla přesnou kopií. Nevím proč, ale všechny hodnoty, které byly předány se nastavili na hodnotu NULL. Proto se formulář nebindoval.Řešení se ukázalo snadnější, než bylo:
public void Bind(Flight flight)
{
if (!DesignMode)
{
bsAirport.DataSource = WcfClient.CodeTables.AirportCodeTable .Instance;
bsFlightType.DataSource = WcfClient.CodeTables.FlightTypeCodeTable .Instance;
bsFlightSpecification.DataSource = WcfClient.CodeTables.FlightSpecificationCodeTable .Instance;
bsFlight.DataSource = flight;
}
}