これは、グリッドビューのコード ビハインドです。
gridViewLog.DataSource = LogManager.getEntriesByUser(UserManager.getCurrentUser());
gridViewLog.AutoGenerateColumns = false;
BoundField ev = new BoundField();
ev.DataField = "getMessage";
ev.HeaderText = "Ereignis";
gridViewLog.Columns.Add(ev);
BoundField name = new BoundField();
name.DataField = "User.Name";
name.HeaderText = "Name";
gridViewLog.Columns.Add(name);
gridViewLog.DataBind();
LogManager.getEntriesByUser(int id) は、LogEntry オブジェクトのリストを返します。LogEntry クラスは次のようになります。
public class LogEntry
{
private User user;
public User User
{
get {
if(user == null)
user = UserManager.getUserById(userId);
return user;
}
}
public virtual String getMessage
{
get
{
return "test";
}
}
}
これはうまくいきます。しかし、リストに次のクラスのオブジェクトが含まれていると、例外が発生します。
class NeuerKunde : LogEntry
{
public override String getMessage
{
get { return "Test2"; }
}
}
例外: "Der Eigenschaftenaccessor getMessage für das Model.LogEntry-Objekt hat folgende Ausnahme verursacht: Das Objekt stimmt mit dem Zieltyp nicht überein"
翻訳: 「Model.LogEntry-Object の Property-Accessor getMessage により例外が発生しました: オブジェクトがターゲット タイプと一致しません。」
innerExeption は TargetExeption であり、同じことを言います。
リフレクションなしでプロパティにアクセスしようとするとうまくいきます。
getMessage-Property を呼び出そうとする gridView と関係があると思いますが、修正方法がわかりません...
誰?