1

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>
4

1 に答える 1

2

私があなたの質問を正しく理解した場合、あなたがしなければならないのは:

if(ObjectType=="Cats")
{
     Int32 objID = Convert.toInt32(grid.GetRowValuesByKeyValue(e.KeyValue, "ObjectID"));
     cbCats.Items[cbCats.Items.FindByValue(objId)].selected = true;
}

予防策として、次のようなチェックを入れることができます。

if(cbCats.Items.FindByValue(objID) != null)
{
     cbCats.Items[cbCats.Items.FindByValue(objId)].selected = true;
}
else
{
     cbCats.Items[0].selected = true;
}

それがあなたの望む結果をもたらすことを願っています。

于 2012-05-19T20:09:10.303 に答える