我需要使用 DevExpress ASPxGridView。我有一个数据源对象,它返回重要的两列,ObjectType 和 ObjectID。ObjectType 可以是 Patient 或 Physician。ObjectID 是一个 int 值,给出了患者或医生的 ID。希望这是有道理的。ObjectID 由 Patient 表或 Physician 表选择,它们是缩进表,因此我无法以任何方式加入它们。
表结构如下所示:
对象表:ObjectType varchar(“医师”或“患者”),ObjectID int
Dogs 表 ID int,名称 varchar
Cats 表 ID int,名称 varchar
我已经能够通过组合框编写适当的 objectType,并使用由数据源填充的两个控件 cbPatient 和 cbPhysician 编写 ObjectID。
我想不通的是,当我编辑 ASPxGridView 时,如何在 cbPatient 或 cbPhysician 中显示对象值。例如,如果 ObjectType 是 Cats 并且 ObjectID 是 1,那么我想在 cbCats 中显示与 ID 为 1 对应的名称。
这就是代码的外观。现在,无论出于何种原因,在某些情况下,所选值在某些时候变为空白。我不确定在什么事件中运行此代码。
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>