別のコンボボックス(Janus UICombobox)を継承するカスタムコンボボックスコントロールを開発しています。 データソースをEntityType(LLBLGEN)に基づいて、ユーザーがEntityTypeを選択したときにそのEntityTypeのすべてのデータベースレコードがコンボボックスにロードされるようにしたいと思います。カスタムコンボボックスコントロールカスタムデータソース(カスタムdisplaymemberとvaluememberを使用)
これはうまくいきますが、選択したEntityTypeに基づいてDisplayMemberとValueMemberを選択するようにユーザーにアピールできるようにしたいと思います。
I次のコードを持っている:
public partial class DtUiComboBox : UIComboBox
{
private Thread _loadThread;
public DtUiComboBox()
{
InitializeComponent();
}
//Don't want this to be visible in the designer
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new object DataSource
{
get;
set;
}
//Don't want this to be visible in the designer
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string DisplayMember
{
get;
set;
}
//Don't want this to be visible in the designer
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string ValueMember
{
get;
set;
}
//Don't want this to be visible in the designer
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string DataMember
{
get;
set;
}
//My Custom DisplayMember that should be based on the EntityFields from the selected EntityType
[Category("Data")]
public string DisplayField
{
get;
set;
}
//My Custom ValueMember that should be based on the EntityFields from the selected EntityType
[Category("Data")]
public string ValueField
{
get;
set;
}
private EntityType? _entityType;
[Category("Data")]
public EntityType? EntityTypeSource
{
get
{
return _entityType;
}
set
{
if (value != null)
{
_entityType = value;
IEntity2 entity2 = Dal.FactoryClasses.GeneralEntityFactory.Create(_entityType.Value);
if (!DesignMode && !IsDesignerHost)
{
if (_loadThread != null && _loadThread.IsAlive)
{
_loadThread.Abort();
_loadThread.Join(500);
}
_loadThread = new Thread(new ThreadStart(LoadFromEntityType));
_loadThread.Start();
}
Invalidate(true);
}
}
}
private void LoadFromEntityType()
{
if (_entityType.HasValue)
{
IEntityCollection2 entityCollection = DtBlClient.Instance.Bl.GetCollection(_entityType.Value);
LoadFromEntityType(entityCollection);
}
}
private delegate void LoadFromEntityTypeDel(IEntityCollection2 collection2);
private void LoadFromEntityType(object data)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new LoadFromEntityTypeDel(LoadFromEntityType), data);
return;
}
DataSource = data;
}
[BrowsableAttribute(false)]
[Description("This method checks if I run in DesignMode, because Threading doesn't work in the Designer")]
public bool IsDesignerHost
{
get
{
Control ctrl = this;
while (ctrl != null)
{
if ((ctrl.Site != null) && ctrl.Site.DesignMode)
return true;
ctrl = ctrl.Parent;
}
return false;
}
}
[Browsable(false)]
[Description("This method checks if I run in DesignMode, because Threading doesn't work in the Designer")]
public new static bool DesignMode
{
get
{
string processName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if (processName.Equals("devenv"))
return true;
return false;
}
}
}
どのように私はこれを行うことができますか?
が、私はその部分を理解し、多分私の質問は、十分に明確ではなかったので、私は説明しよう: ときユーザーはEntityTypeを選択しますDisplayMemberとValueMemberの選択可能なリストとしてそのエンティティのすべてのEntityFieldを渡すことができるようにしたいと思います。 – Than
私の編集を参照してください、多分それはあなたを助けるでしょう... – Shimrod