Developer Express 的一些注意事项
### Developer Express 的一些注意事项 #### 一、GridView 动态隐藏或显示行 在使用 DevExpress 控件中的 GridView 组件时,我们经常会遇到需要根据特定条件动态地隐藏或显示某些列的情况。例如,在以下代码片段中,`gvJCBM` 的第 7 列和第 4 列会根据 `ZDBZ` 和 `FCDY` 字段的值来决定是否显示。 ```csharp // 绑定数据 this.gvJCBM.DataBind(); // 判断并隐藏或显示列 if (this.gvJCBMLX.GetRowValues(this.gvJCBMLX.FocusedRowIndex, "ZDBZ").ToString() == "1") { this.gvJCBM.Columns[7].Visible = false; } else { this.gvJCBM.Columns[7].Visible = true; } if (this.gvJCBMLX.GetRowValues(this.gvJCBMLX.FocusedRowIndex, "FCDY").ToString() == "0") { this.gvJCBM.Columns[4].Visible = false; } else { this.gvJCBM.Columns[4].Visible = true; } ``` 这里需要注意的是: - `GetRowValues` 方法用于获取当前焦点所在行的数据。 - `FocusedRowIndex` 表示当前被聚焦的行索引。 - `Visible` 属性用于控制列的可见性。 #### 二、新增与修改时编辑行为的不同 在 DevExpress 的 GridView 控件中,我们还可以控制在新增记录和修改现有记录时字段的编辑状态。这通常通过重写 `GridView` 的 `CellEditorInitialize` 事件处理程序实现: ```csharp protected void gvJCBM_CellEditorInitialize(object sender, DevExpress.Web.ASPxGridViewEditorEventArgs e) { if (e.Column.FieldName == "S_JCBM") { e.Editor.ReadOnly = !this.gvJCBM.IsNewRowEditing; // 根据当前是否为新行设置只读属性 } } ``` 这里的关键点在于: - `IsNewRowEditing` 属性判断当前是否处于新增模式。 - 通过设置 `e.Editor.ReadOnly` 来控制编辑器的可编辑性。 #### 三、增删改操作时绑定 SQL 数据源问题 当我们在进行增删改操作时,绑定的数据源如果是 SQLDataSource,那么需要注意输入参数的有效性和一致性。例如,在进行删除操作时,需要确保 `sqlDataSource` 中的方法(如 `dsJCBM_Deleting`)正确触发,并且能够接收来自 `GridView` 的键值。同时,还需要注意以下几点: 1. **参数一致性**:确保在触发增删改操作时,输入到 `sqlDataSource` 中的参数与数据库期望的参数一致。 2. **事件处理**:如 `dsJCBM_Inserting`、`dsJCBM_Updating`、`dsJCBM_Deleting` 等方法需要正确设置并处理。 3. **数据有效性检查**:在进行增删改之前,最好对数据的有效性进行检查。 #### 四、使用 ASPxComboBox 实现联动效果 DevExpress 提供了多种控件来帮助开发者实现复杂的 UI 功能,其中 ASPxComboBox 就是一个非常强大的下拉框控件。通过配置数据源和事件处理,可以轻松实现数据的联动显示。 下面是一个简单的例子,展示了如何通过两个 `ASPxComboBox` 控件实现联动效果。 **HTML 部分**: ```html <dxe:ASPxComboBox ID="aspddlFPLX" ClientInstanceName="aspddlFPLX" runat="server" DataSourceID="sqlFPLB" ValueType="System.String" TextField="LBMC" ValueField="LBBH" Width="140PX"> <ClientSideEvents ValueChanged="function(s, e) { changeFPLX(s); }" /> </dxe:ASPxComboBox> <dxe:ASPxComboBox ID="aspddlFPBBH" ClientInstanceName="aspddlFPBBH" runat="server" DataSourceID="dsFPBBH" ValueType="System.String" TextField="FPBBH" ValueField="FPBBH" Width="140PX" OnCallback="aspddlFPBBH_Callback"> </dxe:ASPxComboBox> <asp:SqlDataSource ID="sqlFPLB" runat="server" SelectCommand="SELECT LBBH, LBMC FROM FPLB WHERE IS_VALID = 1" ProviderName="System.Data.OracleClient" OnInit="sqlFPLB_Init"> </asp:SqlDataSource> <asp:SqlDataSource ID="dsFPBBH" runat="server" SelectCommand="SELECT FPBBH FROM FPBBH WHERE FPLB = :FPLB" ProviderName="System.Data.OracleClient" OnInit="dsFPBBH_Init"> <SelectParameters> <asp:Parameter Name="FPLB" /> </SelectParameters> </asp:SqlDataSource> ``` **JavaScript 部分**: ```javascript function changeFPLX(fplxValue) { aspddlFPBBH.PerformCallback(fplxValue.GetValue()); } ``` **C# 后端部分**: ```csharp protected void aspddlFPBBH_Callback(object source, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e) { if (string.IsNullOrEmpty(e.Parameter)) return; this.dsFPBBH.SelectParameters["FPLB"].DefaultValue = e.Parameter; } ``` 这里的关键点包括: - 使用 `OnCallback` 事件处理回调操作。 - 通过 `ValueChanged` 事件监听选择的变化,并触发相应的回调操作。 - 在后端通过 `SelectParameters` 设置参数的默认值,以便联动查询。 ### 总结 DevExpress 是一个功能强大且易于使用的开发框架,尤其适合于创建复杂的企业级应用程序。本文详细介绍了在使用 DevExpress 的 GridView 和 ASPxComboBox 控件时可能会遇到的一些关键问题及解决方案。通过上述示例,我们可以更好地理解如何在实际项目中利用这些工具提高开发效率和用户体验。
this.gvJCBM.DataBind();
if (this.gvJCBMLX.GetRowValues(this.gvJCBMLX.FocusedRowIndex, "ZDBZ").ToString() == "1")
{
this.gvJCBM.Columns[7].Visible = false;
}
else
{
this.gvJCBM.Columns[7].Visible = true;
}
if (this.gvJCBMLX.GetRowValues(this.gvJCBMLX.FocusedRowIndex, "FCDY").ToString() == "0")
{
this.gvJCBM.Columns[4].Visible = false;
}
else
{
this.gvJCBM.Columns[4].Visible = true;
}
2、让gvJCBM里面的数据的某一列修改的时候不能编辑,新增的时候却能编辑,在gvJCBM_CellEditorInitialize事件里面写
if (e.Column.FieldName == "S_JCBM")
{
e.Editor.ReadOnly = !this.gvJCBM.IsNewRowEditing;
}
3、当gv做增删改的时候绑定的数据源sqlDataSource的时候,报参数的个数或类型不对的时候,需要注意先检查参数与存储过程或sql语句的参数个数是否正确,名称是否正确,类型是否正确,如果都正确,就可以用dsJCBM_Inserting,dsJCBM_Updating,dsJCBM_Deleting里面的参数e,或sender是否对应。还有一个问题,如果你做添加删除的时候,都可以,但是删除的时候,一样的参数,却不正确,调试dsJCBM_Deleting的参数却不对,那你要看看你gvJCBM里面的KeyFieldName属性是否和你删除的时候的参数一样的。
4、给dsJCBM的dsJCBM_Deleting添加一个参数
方法:e.Command.Parameters.Add(new OracleParameter("S_CH","01"));//S_CH:列名,01:是默认的值
5、dx中联动的用法:
两个下拉列表框:
<dxe:ASPxComboBox ID="aspddlFPLX" ClientInstanceName="aspddlFPLX" runat="server" DataSourceID="sqlFPLB" ValueType="System.String"
TextField="LBMC" ValueField="LBBH" Width="140PX">
- weixin_401924272017-12-20总结的很精辟
- 粉丝: 9
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助