asp.net – 如何在ASpxGridView中以编程方式选择ASPxComboBox中
发布时间:2020-12-16 03:21:45 所属栏目:asp.Net 来源:网络整理
导读:我需要使用DevExpress ASPxGridView.我有一个数据源对象,它返回两个重要的列,ObjectType和ObjectID. ObjectType可以是患者或医生. ObjectID是一个i??nt值,给出患者或医师的ID.希望这是有道理的. ObjectID由Patient表或Physician表选择,它们是indendent表,因
我需要使用DevExpress ASPxGridView.我有一个数据源对象,它返回两个重要的列,ObjectType和ObjectID. ObjectType可以是患者或医生. ObjectID是一个i??nt值,给出患者或医师的ID.希望这是有道理的. ObjectID由Patient表或Physician表选择,它们是indendent表,因此我无法以任何方式加入它们.
表结构如下所示: 对象表:ObjectType varchar(“Physician”或“Patient”),ObjectID int Dogs Table ID int,Name 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> 解决方法
我终于发现组合框在数据绑定之后触发了一个DataBound事件,该事件发生在RowEditting事件之后(或者它被调用的任何事件).我发现的最佳解决方案是此代码.也许有一个更优雅的解决方案,但这是有效的.会话变量是为了避免在执行行更新时触发代码(是的它也会触发,不要问我为什么).
protected void cbPatient_DataBound(object sender,EventArgs e) { object rightsindex = grid.GetRowValues(grid.EditingRowVisibleIndex,"Rights"); if (rightsindex == null) return; int rights = Int32.Parse(grid.GetRowValues(grid.EditingRowVisibleIndex,"Rights").ToString()); object objectID = grid.GetRowValues(grid.EditingRowVisibleIndex,"ObjectID"); ASPxComboBox cbPatient = ((ASPxComboBox)grid.FindEditRowCellTemplateControl(grid.Columns["PatientID"] as GridViewDataComboBoxColumn,"cbPatient")); if (cbPatient != null && cbPatient.Items.Count > 1) { if (rights == 8) { ListEditItem pt = cbPatient.Items.FindByValue(objectID); if (pt != null && Session["PatientID"] == null) { cbPatient.Items[pt.Index].Selected = true; Session["PatientID"] = (Int32)pt.Value; } } //cbPatient.Items[1].Selected = true; } } 并在ASP.NET中 <dx:GridViewDataComboBoxColumn Caption="Patient Name" FieldName="PatientID" Name="PatName" Visible="false"> <PropertiesComboBox DataSourceID="dsPatName" TextField="Name" ValueField="ID" ValueType="System.Int32"> </PropertiesComboBox> <EditItemTemplate> <dx:ASPxComboBox ID="cbPatient" runat="server" DataSourceID="dsPatName" TextField="Name" ValueField="ID" Value='<%# Bind("PatientID") %>' AutoPostBack="false" ValueType="System.Int32" ondatabound="cbPatient_DataBound" > </dx:ASPxComboBox> </EditItemTemplate> </dx:GridViewDataComboBoxColumn> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – Asp.net MVC动态菜单系统
- asp.net-mvc – MVC应用程序中的随机数生成
- asp.net – 如何检测请求是否是Global.asax中的回调?
- asp.net – Telerik RadGrid – 如何默认编辑模式?
- asp.net – 是否有支持请求参数连接的URL构建器?
- 休息 – OData与GraphQL GraphQL比较OData有什么优势?
- asp.net url分页类代码
- asp.net – 使用facebook登录的asp .net 4.0会员资格
- C# 超高速高性能写日志 代码开源
- asp.net-mvc – 从n层ASP.Net MVC应用程序的服务层处理或抛
推荐文章
站长推荐
热点阅读