DevExpressASPxGridViewを使用する必要があります。ObjectTypeとObjectIDの2つの重要な列を返すデータソースオブジェクトがあります。ObjectTypeは、PatientまたはPhysicianにすることができます。ObjectIDは、患者または医師のIDを与えるint値です。うまくいけば、これは理にかなっています。ObjectIDは、PatientテーブルまたはPhysicianテーブルのいずれかによって選択されます。これらは独立したテーブルであるため、どのような方法でも結合できません。
テーブル構造は次のようになります。
オブジェクトテーブル:ObjectType varchar("Physician"または"Patient")、ObjectID int
Dogs Table ID int、Name varchar
CatsテーブルIDint、名前varchar
コンボボックスで適切なobjectTypeを記述し、データソースによって入力される2つのコントロールcbPatientとcbPhysicianを使用してObjectIDを記述できました。
ASPxGridViewを編集するときに、オブジェクトの値をcbPatientまたはcbPhysicianに表示するにはどうすればよいかわかりません。たとえば、ObjectTypeがCatsで、ObjectIDが1の場合、ID1に対応する名前をcbCatsに表示します。
これがコードの外観です。現在、何らかの理由で、選択された値は、ある時点で、ある時点で空白になります。このコードを実行するイベントがわかりません。
protected void grid_HtmlRowCreated(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
{
if (e.RowType != DevExpress.Web.ASPxGridView.GridViewRowType.EditForm) return;
if (grid.IsNewRowEditing || grid.IsEditing)
{
int val = (int)grid.GetRowValues(grid.EditingRowVisibleIndex, "ObjectID" );
ASPxComboBox cbPatient = ((ASPxComboBox)grid.FindEditRowCellTemplateControl(grid.Columns["PatientID"] as GridViewDataComboBoxColumn, "cbPatient"));
if (val != 0)
{
string objectID = grid.GetRowValues(grid.EditingRowVisibleIndex, "ObjectID").ToString();
if (cbPatient.Items.Count > 0)
{
cbPatient.Items[1].Selected = true;
}
else
{
cbPatient.DataSource = dsPatName;
cbPatient.DataBindItems();
if (cbPatient.Items.Count > 0)
cbPatient.Items[1].Selected = true;
}
}
}
}
これはASPXコードです。
</dx:GridViewDataComboBoxColumn>
<dx:GridViewDataComboBoxColumn Caption="Patient Name" FieldName="PatientID" Name="PatName" Visible="false">
<PropertiesComboBox TextField="Name" ValueField="ID" ValueType="System.Int32"></PropertiesComboBox>
<EditItemTemplate>
<dx:ASPxComboBox ID="cbPatient" runat="server" TextField="Name" ValueField="ID"
Value='<%# Bind("PatientID") %>' AutoPostBack="false" ValueType="System.Int32" > </dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataComboBoxColumn>