DevExpress ASPxGridView を使用する必要があります。ObjectType と ObjectID の 2 つの重要な列を返すデータソース オブジェクトがあります。ObjectType は Dogs または Cats です。ObjectID は、犬または猫の ID を示す int 値です。うまくいけば、これは理にかなっています。ObjectID は Dog テーブルまたは Cat テーブルのいずれかによって選択されます。これらはインデンデント テーブルであるため、それらを結合することはできません。
したがって、基本的には次のようになります。
オブジェクト テーブル: ObjectType varchar ("Dogs" または "Cats") ObjectID int
Dogs テーブル ID int Name varchar
Cats テーブル ID int Name varchar
コンボボックスによって適切な objectType を記述でき、データソースによって入力される 2 つのコントロール cbDogs と cbCats を使用して ObjectID を記述できました。
私が理解できないのは、ASPxGridView を編集するときに、オブジェクトの値を cbCats または cbDogs に表示するにはどうすればよいかということです。たとえば、ObjectType が Cats で ObjectID が 1 の場合、ID 1 に対応する名前を cbCats に表示したいと考えています。本当にやりたいことは次のようなことです。明らかに、このコードはまったく機能しません。
if (ObjectType = "Cats")
{
object objID = grid.GetRowValuesByKeyValue(e.KeyValue, "ObjectID");
string objIDstr = objID.ToString()
cbCats.SelectedValue = objIDstr // or something like this
}
これが役立つ場合は、aspx ページの猫の宣言を次に示します。
<dx:GridViewDataComboBoxColumn Caption="Cat Name" FieldName="CatID" Name="CatName" Visible="false">
<PropertiesComboBox DataSourceID="dsCatName" TextField="Name" ValueField="ID" ValueType="System.Int32">
</PropertiesComboBox>
<EditItemTemplate>
<dx:ASPxComboBox ID="cbCat" runat="server" DataSourceID="dsCatName" TextField="Name" ValueField="ID"
Value='<%# Bind("CatID") %>' AutoPostBack="false" ValueType="System.Int32" > </dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataComboBoxColumn>