我需要使用DevExpress ASPxGridView。我有一個數據源對象,它返回兩列重要性,ObjectType和ObjectID。 ObjectType可以是患者或醫師。 ObjectID是一個給出患者或醫師ID的int值。希望這是有道理的。 ObjectID由Patient表或Physician表選擇,它們是分隔表,所以我無法以任何方式加入它們。如何以編程方式在ASpxGridView中選擇ASPxComboBox中的值
表結構看起來像這樣:
對象表:對象類型的varchar( 「醫師」 或 「患者」),的ObjectID INT
狗表ID INT,名稱爲varchar
貓表ID int,Name varchar
我已經能夠使用兩個控件cbPatient和cbPhysician通過組合框編寫相應的objectType,並通過數據源填充了兩個控件cbPatient和cbPhysician。
我無法弄清楚的是,當我編輯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>
好猜,但是這是當網格editted產生.aspx的組合框。所以這不是一個下拉列表。查看新的ASPX代碼。我很難確定何時生成控件,以及如何實際訪問控件。 – Rob