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存储第二个下拉框的所有值,以供查询,到此,菜单联动的实现已经讲完,个人认为,此种实现比官方的较为清晰,且在添加和修改时都可以进行菜单联动,呵呵,不是经常写这些东西,只能多贴代码了。
第一步:
将列设定为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存储第二个下拉框的所有值,以供查询,到此,菜单联动的实现已经讲完,个人认为,此种实现比官方的较为清晰,且在添加和修改时都可以进行菜单联动,呵呵,不是经常写这些东西,只能多贴代码了。
相关文章推荐
- DevExpress ASPxGridView 使用文档三:编辑
- DevExpress: ASPxGridView 中绑定下拉框(不用该死的ASPxDropDownEdit,而用简单的GridViewDataComboBoxColumn)
- 如何在DevExpress ASPxGridView中进行编辑
- DevExpress ASPxGridView 使用文档三:编辑
- (DevExpress2011控件教程)ASPxGridView 范例2 :ASPxGridView 增、删、改及内嵌comboBox
- DevExpress2011控件教程)ASPxGridView 范例2 :ASPxGridView 增、删、改及内嵌comboBox
- (转载)DevExpress ASPxGridView 使用文档三:编辑
- 下拉式菜单在GridView编辑时联动选择
- DevExpress 的 ASPxGridView 控件显示主从表
- GridView分页后跳转其他页面进行添加,编辑,删除操作后,仍返回到当前页码[原]
- DevExpress GridView 添加和设置右键菜单
- GridView鼠标移动到某一行时行发生变色和为Gridview中编辑模板中的控件添加颜色
- devExpress Gridview添加按钮或链接
- DevExpress ASPxComboBox lost selected item after postback
- 评论(3/4)编辑删除GridView导出Excel研究
- Devexpress ASPxGridView事件调用顺序
- DevExpress之ASPxGridView笔记(1)
- DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1
- aspxgridview 添加列
- [DevExpress.AspxGridView]点滴系列01