您的位置:首页 > 编程语言 > ASP

DevExpress中的ASPxGridView添加、编辑时的ComboBox联动研究

2012-04-26 18:29 471 查看
在学习了一段时间DevExpress后,无论是MVC下的ASPxGridView,还是WebForm下的都有了一定的了解,不过最近在webform下使用下拉框联动时还是碰到了一定的问题,研究了官方Demo,发现只有在编辑时才可实现联动效果,但实际需求要在添加时也要联动,因此花了点时间来研究,改进了修改时的联动效率,拿来分享。

第一步:

将列设定为GridViewDataComboBoxColumn,并添加一个数据源,在此选用的是ObjectDataSource,因为所有业务处的方法都已写好,第一个下拉框添加一个客户端的选择变化事件,代码如下:

<dx:GridViewDataComboBoxColumn FieldName="TYPE_ID" Caption="品种" VisibleIndex="2">

<PropertiesComboBox DataSourceID="ODSProTypes" ValueField="ID" DropDownStyle="DropDownList" EnableSynchronization="False"

IncrementalFilteringMode="StartsWith" TextField="TYPE_NAME" ValueType="System.String" >

<ClientSideEvents SelectedIndexChanged="function(s, e) { OnProTypeChanged(s); }"></ClientSideEvents>

</PropertiesComboBox>

</dx:GridViewDataComboBoxColumn>

数据源代码如下:

<asp:ObjectDataSource ID="ODSProTypes" runat="server" TypeName="Richfit.Garnet.Web.Views.SalesMIS.DayRequestMgmt" SelectMethod="GetAllProTypes"></asp:ObjectDataSource>

客户端的js事件代码为:

function OnProTypeChanged(cmbProType) {

document.getElementById("HiddenTypeId").value = cmbProType.GetValue().toString();

grid.GetEditor("BRAND_ID").PerformCallback(cmbProType.GetValue().toString());

}

在此我加了一个隐藏域来保存第一个下拉框的值。

第二步:

第二个下拉框的GridViewDataComboBoxColumn也设置一个数据源,加上Select参数,代码如下:

<asp:ObjectDataSource ID="ODSProBrands" runat="server" TypeName="Richfit.Garnet.Web.Views.SalesMIS.DayRequestMgmt" SelectMethod="GetAllProBrands" >

<SelectParameters>

<asp:Parameter Name="TypeId" />

</SelectParameters>

</asp:ObjectDataSource>

<dx:GridViewDataComboBoxColumn FieldName="BRAND_ID" Caption="牌号" VisibleIndex="4">

<PropertiesComboBox DataSourceID="ODSProBrands" ValueField="ID" DropDownStyle="DropDownList" EnableSynchronization="False"

IncrementalFilteringMode="StartsWith" TextField="BRAND_NAME" ValueType="System.String" />

</dx:GridViewDataComboBoxColumn>

第三步:

为ASPxGridView加上oncelleditorinitialize事件,意为在编辑行的时候进行数据绑定操作,后台事件方法为:

/// <summary>

/// 菜单联动

/// </summary>

protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e)

{

if (e.Column.FieldName == "BRAND_ID" && e.Column is GridViewDataComboBoxColumn)

{

ODSProBrands.SelectParameters[0].Name = "TypeId";

ODSProBrands.SelectParameters[0].DefaultValue = HiddenTypeId.Value;

}

}

其中ODSProBrands为第二个下拉框的数据源,在此获得第一个下拉框的值后,作为参数传进去,第二个数据源的select方法代码为:

/// <summary>

/// 获取牌号

/// </summary>

public DataTable GetAllProBrands(string TypeId)

{

DataTable dt = (DataTable)Session["AllProBrands"];

if (string.IsNullOrEmpty(TypeId))

{

return dt;

}

else

{

DataRow[] rows = dt.Select("TYPE_ID='" + TypeId + "'");

DataTable newDT = dt.Clone();

foreach (DataRow row in rows)

{

newDT.ImportRow(row);

}

return newDT;

}

}

在此使用Session存储第二个下拉框的所有值,以供查询,到此,菜单联动的实现已经讲完,个人认为,此种实现比官方的较为清晰,且在添加和修改时都可以进行菜单联动,呵呵,不是经常写这些东西,只能多贴代码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: