如何在devexpress官网 ASPxGridView中进行编辑

如何對DevExpress ASPxGridView進行分組排序?
有時候客戶想要在一個域內對ASPxGridView的欄進行分組,而在另一個域內對其排序。本文中,我想描述一下如何通過不同的方法實現這個特點。因为,這並不像它可能看起來的那样簡單。
在設計時,我們創建了
有時候客戶想要在一個域內對的欄進行分組,而在另一個域內對其排序。本文中,我想描述一下如何通過不同的方法實現這個特點。因为,這並不像它可能看起來的那样簡單。
在設計時,我們創建了一個簡單的網格,它的數據從數據源控件處獲得。我們想按城市來對ASPxGridView進行分組,而按國家對它進行排序。
這個任務可以通過以下幾種方法來解决:
1.通過自定義欄位排序:按城市將網格分組,但是通過自定義欄位排序事件按國家對其排序。
2.在另一個域內對網格排序:按城市將網格分組,但是通過分組匯總排序信息類按國家對其排序。
3.通過自定義匯總類型對網格排序:按城市將網格分組,但是通過分組匯總排序信息類和自定義匯總計算事件按國家對其排序。
4.通過它們的名字對值進行排序:使用GridViewDataComboBoxColumn文本完成分組。
下面,你可以找到一些關於這些任務的更詳細的描述:
1.自定義欄位排序:按城市將ASPxGridView分組,但是通過自定義欄位排序事件按國家對其排序。
要使用這種方法,你應該運用ASPxGridView.CustomColumnSort 事件。一個欄的Settings.SortMode 屬性指定了當對這個欄進行排序時,網格的數據是如何被排序的。在我們這個例子中,屬性值被設为&自定義&。因此,一個針對&城市&欄的自定義排序算法將會 通過處理自定義欄位排序事件被執行。
&dx:GridViewDataTextColumn FieldName="City" VisibleIndex="2" GroupIndex="0"&
&Settings SortMode="Custom"/&
&/dx:GridViewDataTextColumn&
在自定義欄位排序事件句柄中,我們對兩行進行了比較。通過CustomColumnSortEventArgs.Column 参數來指定被處理的欄位。CustomColumnSortEventArgs.Value1 和CustomColumnSortEventArgs.Value2 兩個参數區分出在這個欄中的行值。
自定義比較的結果用來設定CustomColumnSortEventArgs.Result 的参數,如下所示:
結果設为-1的情況,當數據以升序排列時,第一行應該放置在第二行的上面或者當數據位降序排列時,第一行放置在第二行的下面。
結果設为1的情況,當數據以升序排列時,第一行應該放置在第二行的下面或者當數據位降序排列時,第一行放置在第二行的上面。
結果設为0時表示這兩行相等。這種情況下,這些行在網格裏的位置將會根據它們在數據源裏的索引來確定。
我們把e.handled参數的值設为真,從而忽略掉默認的比較機制。
protected void gridCustomers_CustomColumnSort(object sender, CustomColumnSortEventArgs e) {
if (e.Column != null & e.Column.FieldName == "City") {
object country1 = e.GetRow1Value("Country");
object country2 = e.GetRow2Value("Country");
int res = pare(country1, country2);
if (res == 0) {
object city1 = e.Value1;
object city2 = e.Value2;
res = pare(city1, city2);
e.Result =
e.Handled =
2.在另一個域內對ASPxGridView排序:按城市將ASPxGridView分組,但是通過分組匯總排序信息類按國家對其排序。
根據ASPxGroupSummarySortInfo對象提供的信息,基於此信息得到的匯總值來將組中的行排序。這些對象引入的屬性代表了排序次序,用來計算匯總值的匯總項,等等。這些屬性是只讀的,並且由構造函數來初始化。
通過匯總值來排序組中的行,創建一個ASPxGroupSummarySortInfo對象,使用 GroupSummarySortInfoCollection.Add 方法把它添加到ASPxGridView的分組匯總排序信息集合裏。把ASPxGroupSummarySortInfo對象添加到這個集合以後,組中的 行就會根據它們的匯總值自動的排序。
gridCustomers.GroupSummarySortInfo.Clear();
ASPxGroupSummarySortInfo sortInfo = new ASPxGroupSummarySortInfo();
sortInfo.SortOrder = ColumnSortOrder.A
sortInfo.SummaryItem = gridCustomers.GroupSummary["Country", SummaryItemType.Min];
sortInfo.GroupColumn = "City";
3.通過自定義匯總類型對ASPxGridView排序:按城市將ASPxGridView分組,但是通過分組匯總排序信息類和自定義匯總計算事件按國家對其排序。
這種方法與前一種方法的不同點僅僅在於排序機制使用了一個自定義的匯總值。匯總自定義計算法則應用到自定義匯總計算事件句柄中。自定義匯總計算事件會觸發 匯總計算中涉及到的每一行。當計算總的匯總值的時候,該事件將會被每一個數據行觸發。在當前這個例子裏,为了簡單起見,自定義的總的匯總值等於子匯總值。
請参考ASPxGridView.CustomSummaryCalculate 事件和自定義匯總函數,這有助於學習更多關於自定義匯總計算過程的知識。
gridCustomers.GroupSummarySortInfo.Clear();
ASPxGroupSummarySortInfo sortInfo = new ASPxGroupSummarySortInfo();
sortInfo.SortOrder = ColumnSortOrder.A
sortInfo.SummaryItem = gridCustomers.GroupSummary["Country", SummaryItemType.Custom];
sortInfo.GroupColumn = "City";
gridCustomers.GroupSummarySortInfo.AddRange(sortInfo);
protected void gridCustomers_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
ASPxSummaryItem item = e.Item as ASPxSummaryI
if (item.FieldName == "Country") {
if (e.SummaryProcess == CustomSummaryProcess.Finalize)
e.TotalValue = e.FieldValue.ToString();
4.通過它們的名字對值進行排序:使用GridViewDataComboBoxColumn文本完成分組。
想通過文本而不是值來對GridViewDataComboBoxColumn進行排序的話,你應該將ASPxGridViewBehaviorSettings.SortMode 屬性值設为&顯示文本&。
&SettingsBehavior SortMode="DisplayText" /&
同样,這種方法演示了如何为已分組的欄顯示一個自定義文本。你應該使用GroupRowContent模板來完成這個任務。
&Templates&
&GroupRowContent&
"Category: " + Container.GroupText%&
&/GroupRowContent&
&/Templates&
------分隔線----------------------------
下一篇:沒有了
原文來自方案網 //Product-detail-item-...
“一寸光陰一寸金,寸金難買寸光陰”。從小,我們接受的...
&&&&&&& JAVA與JAVASCRIPT
我並不为樓主的標題所吸引,也不問題的內容所迷惑。
TinyGUI是我在2010上半年的時候,基於.NET Micro Framework系統開發的一...
平時我們創建Zip文件的時候,要麼用現成的軟件,要麼用第三方...1、控件功能& & &列表控件展示数据、弹框控件执行编辑操作、Tab控件实现多标签编辑操官方说明2、官方示例
& & & 2.1&ASPxGridView& &&& &&& &&& &&
& & & 2.2 PopUp& &&& &&& &&& &&
& & & 2.3 Tab    
3、使用说明& & & 3.1 aspx页面说明
&%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master"
AutoEventWireup="true" CodeFile="DemoGridView.aspx.cs" Inherits="Demo_DemoGridView" %&
&asp:Content ID="Content1" ContentPlaceHolderID="cphJs" runat="Server"&
&script type="text/javascript"&
var key = "Id";
function Menu_Click(s, e) {
if (e.item.name == "add") {
grid.AddNewRow();
//自定义命令
function CustomButtonClick(s, e) {
var value = s.GetRowKey(e.visibleIndex);
AddCollection(key, value);
if (e.buttonID == "SetPasswordButton") {
//如果点击的是【重置密码】链接,则打开
PopupSetPassword.Show();
function SetPasswordClick(s, e) {
if (true) {
PopupSetPassword.PerformCallback(txtPwd.GetText());
//触发后台事件,并传参数
else { alert("两次密码不一致!"); }
//键值对,和服务器端通信
function AddCollection(key, value) {
if (HiddenField.Get(key) == null) {
HiddenField.Add(key, value);
HiddenField.Set(key, value);
function PopupSetPassword_endCallback(s, e) {
PopupSetPassword.Hide();
Toast.Show(s.cp_retValue);
var lastCountry = null;
var lastCity = null;
function OnCountryChanged(cmbCountry) {
if (grid.GetEditor("CityCode").InCallback())
lastCountry = cmbCountry.GetValue().toString();
lastCountry = cmbCountry.GetValue().toString();
//触发后台的grid_CellEditorInitialize事件,重新绑定省市县信息
grid.GetEditor("CityCode").PerformCallback(cmbCountry.GetValue().toString());
grid.GetEditor("TownCode").PerformCallback(lastCountry + "," + lastCity);
function OnCityChanged(cmbCity) {
//Returns a value that determines whether a callback request sent by a web control is being currently processed on the server side.
if (grid.GetEditor("TownCode").InCallback())
lastCity = cmbCity.GetValue().toString();
//触发onchagne事件
grid.GetEditor("TownCode").PerformCallback(lastCountry + "," + cmbCity.GetValue().toString());
&/asp:Content&
&asp:Content ID="Content2" ContentPlaceHolderID="c1" runat="Server"&
&/asp:Content&
&asp:Content ID="Content3" ContentPlaceHolderID="c2" runat="Server"&
&dx:ASPxGridView runat="server" ID="grid" Width="100%" ClientInstanceName="grid"
KeyFieldName="Id" OnRowInserting="grid_RowInserting" OnRowDeleting="grid_RowDeleting"
OnRowUpdating="grid_RowUpdating" AutoGenerateColumns="False" OnHtmlEditFormCreated="grid_HtmlEditFormCreated"
OnCellEditorInitialize="grid_CellEditorInitialize"&
&ClientSideEvents CustomButtonClick="CustomButtonClick" /&
&dx:GridViewDataTextColumn FieldName="TrueName" Caption="真实姓名" VisibleIndex="3"&
&/dx:GridViewDataTextColumn&
&dx:GridViewDataTextColumn FieldName="EnterpriseName" Caption="企业" VisibleIndex="1"&
&%--新增、编辑窗体不显示该列--%&
&EditFormSettings Visible="False" /&
&/dx:GridViewDataTextColumn&
&dx:GridViewDataComboBoxColumn FieldName="UserTypeName" VisibleIndex="3" Caption="用户类型"&
&EditFormSettings Visible="False" /&
&/dx:GridViewDataComboBoxColumn&
&%--该列在列表窗体不显示--%&
&dx:GridViewDataTextColumn FieldName="Tel" VisibleIndex="6" Caption="电话" Visible="false"&
&EditFormSettings Visible="True" /&
&/dx:GridViewDataTextColumn&
&%--省市县联动--%&
&dx:GridViewDataComboBoxColumn FieldName="ProvinceCode" VisibleIndex="11" Caption="省编码"
Visible="false"&
&EditFormSettings Visible="True" /&
&PropertiesComboBox&
&ClientSideEvents SelectedIndexChanged="function(s, e) { OnCountryChanged(s); }"&
&/ClientSideEvents&
&/PropertiesComboBox&
&/dx:GridViewDataComboBoxColumn&
&dx:GridViewDataComboBoxColumn FieldName="CityCode" VisibleIndex="12" Caption="市编码"
Visible="false"&
&EditFormSettings Visible="True" /&
&PropertiesComboBox&
&ClientSideEvents SelectedIndexChanged="function(s, e) { OnCityChanged(s); }"&&/ClientSideEvents&
&/PropertiesComboBox&
&/dx:GridViewDataComboBoxColumn&
&dx:GridViewDataComboBoxColumn FieldName="TownCode" VisibleIndex="13" Caption="县编码"
Visible="false"&
&EditFormSettings Visible="True" /&
&/dx:GridViewDataComboBoxColumn&
&%--省市县联动--%&
&%--命令按钮--%&
&dx:GridViewCommandColumn VisibleIndex="17" Caption="操作" Width="120"&
&EditButton Visible="true" Text="编辑"&
&/EditButton&
&DeleteButton Visible="true" Text="删除"&
&/DeleteButton&
&CellStyle HorizontalAlign="Center"&
&/CellStyle&
&/dx:GridViewCommandColumn&
&dx:GridViewCommandColumn Caption="重置密码" VisibleIndex="18" AllowDragDrop="False"&
&CustomButtons&
&dx:GridViewCommandColumnCustomButton ID="SetPasswordButton" Text="重置密码"&
&/dx:GridViewCommandColumnCustomButton&
&/CustomButtons&
&/dx:GridViewCommandColumn&
&/Columns&
&GroupSummary&
&dx:ASPxSummaryItem FieldName="EnterpriseCount" DisplayFormat="{0}数量" SummaryType="Count" /&
&/GroupSummary&
&Templates&
&%--新增、修改Tab控件--%&
&EditForm&
&div style="padding: 4px 4px 3px 4px"&
&dx:ASPxPageControl runat="server" ID="pageControlUser" Width="100%"&
&TabPages&
&dx:TabPage Text=" 基本信息" Visible="true"&
&ContentCollection&
&dx:ContentControl ID="ContentControl1" runat="server"&
&dx:ASPxGridViewTemplateReplacement ID="Editors" ReplacementType="EditFormEditors"
runat="server"&&/dx:ASPxGridViewTemplateReplacement&
&/dx:ContentControl&
&/ContentCollection&
&/dx:TabPage&
&dx:TabPage Text="类型" Visible="true"&
&ContentCollection&
&dx:ContentControl ID="ContentControl2" runat="server"&
&dx:ASPxTreeList ID="OrgUnitTree" runat="server" AutoGenerateColumns="False" Width="100%"
KeyFieldName="OrgUnitId" ParentFieldName="ParentId" ClientInstanceName="OrgUnitTree"&
&dx:TreeListDataColumn FieldName="Name" Caption="名称"&
&CellStyle Wrap="True"&
&/CellStyle&
&/dx:TreeListDataColumn&
&dx:TreeListComboBoxColumn FieldName="TypeName" Caption="类型名称"&
&EditFormSettings Visible="False" /&
&/dx:TreeListComboBoxColumn&
&dx:TreeListDataColumn FieldName="LinkMan" Caption="联系人" /&
&/Columns&
&SettingsBehavior AllowFocusedNode="True" AllowDragDrop="false" ProcessSelectionChangedOnServer="false" /&
&Settings VerticalScrollBarMode="Auto" ShowTreeLines="true" GridLines="Horizontal" /&
&SettingsPager PageSize="20" PageSizeItemSettings-Caption="每页显示:" AlwaysShowPager="True"
CurrentPageNumberFormat="{0}" Mode="ShowPager"&
&Summary AllPagesText="总页数: {0} - {1} (共有 {2} 条数据)" Text="总页数: {0} - {1} (共有 {2} 条数据)" /&
&/SettingsPager&
&/dx:ASPxTreeList&
&/dx:ContentControl&
&/ContentCollection&
&/dx:TabPage&
&/TabPages&
&/dx:ASPxPageControl&
&div style="text-align: padding: 2px 2px 2px 2px"&
&dx:ASPxGridViewTemplateReplacement ID="UpdateButton" ReplacementType="EditFormUpdateButton"
runat="server"&&/dx:ASPxGridViewTemplateReplacement&
&dx:ASPxGridViewTemplateReplacement ID="CancelButton" ReplacementType="EditFormCancelButton"
runat="server"&&/dx:ASPxGridViewTemplateReplacement&
&/EditForm&
&/Templates&
&SettingsPopup EditForm-Modal="true" EditForm-HorizontalAlign="WindowCenter" CustomizationWindow-HorizontalAlign="WindowCenter"
CustomizationWindow-VerticalAlign="WindowCenter"&
&EditForm Width="550px" Height="400px" HorizontalAlign="Center" Modal="True"&&/EditForm&
&/SettingsPopup&
&Settings ShowGroupPanel="true" /&
&SettingsEditing Mode="PopupEditForm" /&
&/dx:ASPxGridView&
&dx:ASPxPopupControl ID="PopupSetPassword" runat="server" CloseAction="CloseButton"
Modal="True" PopupVerticalAlign="WindowCenter" PopupHorizontalAlign="WindowCenter"
AllowDragging="True" ShowFooter="True" Width="350px" Height="130px" HeaderText="重置密码"
ClientInstanceName="PopupSetPassword" OnWindowCallback="PopupSetPassword_WindowCallback"&
&ClientSideEvents EndCallback="PopupSetPassword_endCallback" /&
&ContentCollection&
&dx:PopupControlContentControl ID="PopupControlContentControl2" runat="server"&
&table class="dxgvEditFormTable_Glass"&
&td style="white-space: nowrap"&
新密码:&dx:ASPxHiddenField runat="server" ID="HiddenField" ClientInstanceName="HiddenField"&
&/dx:ASPxHiddenField&
&td class="dxgvEditFormCell_Glass"&
&dx:ASPxTextBox ID="txtPwd" Password="true" runat="server" Width="200" ClientInstanceName="txtPwd"&
&/dx:ASPxTextBox&
&/dx:PopupControlContentControl&
&/ContentCollection&
&FooterTemplate&
&div style="float: margin: 3"&
&dx:ASPxButton ID="RolesListButton" runat="server" Text="
" AutoPostBack="False"
ClientSideEvents-Click="SetPasswordClick"&
&/dx:ASPxButton&
&/FooterTemplate&
&/dx:ASPxPopupControl&
&/asp:Content&
& & & 3.2 cs代码说明
using System.Collections.G
using System.Collections.S
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using DevExpress.Web.ASPxGridV
using DevExpress.Web.ASPxTreeL
using PanPass.YDYX.M
using PanPass.YDYX.BLL;
using DevExpress.Web.ASPxE
using DevExpress.Web.ASPxTabC
using DevExpress.Web.ASPxC
public partial class Demo_DemoGridView : System.Web.UI.Page
protected void AddError(Dictionary&GridViewColumn, string& errors, GridViewColumn column, string errorText)
if (errors.ContainsKey(column)) return;
errors[column] = errorT
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
//新增修改验证
public override void ValidateRow(DevExpress.Web.Data.ASPxDataValidationEventArgs e)
if (e.NewValues["TrueName"] == null)
AddError(e.Errors, grid.Columns["TrueName"], "真实姓名不能为空.");
if (e.NewValues["LoginName"] != null && e.NewValues["LoginName"].ToString().Trim().Length & 3)
AddError(e.Errors, grid.Columns["LoginName"], "登录名长度不能小于3.");
if (grid.IsEditing && grid.IsNewRowEditing) //新增验证
else if (!grid.IsNewRowEditing) //修改验证
if (string.IsNullOrEmpty(e.RowError) && e.Errors.Count & 0) e.RowError = "请改正错误.";
//进入新增、修改页面时初始化或获取数据
protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e)
if (grid.IsEditing) //编辑
else //新增
if (grid.IsEditing && e.Column.FieldName == "ProvinceCode")
ASPxComboBox combo = e.Editor as ASPxComboB
//FillProvinceData(combo);
绑定省份信息
if (grid.IsEditing && e.Column.FieldName == "CityCode")
ASPxComboBox combo = e.Editor as ASPxComboB
object val = grid.GetRowValuesByKeyValue(e.KeyValue, "ProvinceCode");
//BindCbCityByProvince(combo, val);
绑定城市信息
if (grid.IsEditing && e.Column.FieldName == "TownCode")
ASPxComboBox combo = e.Editor as ASPxComboB
object ProvinceCode = grid.GetRowValuesByKeyValue(e.KeyValue, "ProvinceCode");
object CityCode = grid.GetRowValuesByKeyValue(e.KeyValue, "CityCode");
//BindCountyByCity(combo, ProvinceCode, CityCode);
绑定县级信息
void grid_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
if (e.ButtonID == "DeleteButtonID")
//绑定数据
public void bindData()
#region grid事件
//初始化Page控件树
protected void grid_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e)
protected void grid_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
grid.CancelEdit();
e.Cancel = true;
bindData();
//调用js方法
//String js = "gv.PerformCallback();";
//ScriptManager.RegisterStartupScript(Page, this.GetType(), "", js, true);
protected void grid_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
grid.CancelEdit();
e.Cancel = true;
bindData();
protected void grid_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
grid.CancelEdit();
e.Cancel = true;
bindData();
#endregion
protected void PopupSetPassword_WindowCallback(object source, DevExpress.Web.ASPxPopupControl.PopupWindowCallbackArgs e)
int userid = HiddenField.Get("UserId").ToInt().V
//e.P 获取传递的参数
//userid获取在CustomButtonClick添加的隐藏内容
PopupSetPassword.JSProperties["cp_retValue"] = "密码修改成功";
Attachment List
阅读(...) 评论()DevExpress中的GridView怎样设置某一个单元格的编辑状态
[问题点数:40分]
DevExpress中的GridView怎样设置某一个单元格的编辑状态
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。帮助企业打造成功软件!
热门搜索:
解决DevExpress ASPxGridView不支持编辑数据的问题
解决DevExpress ASPxGridView不支持编辑数据的问题
| 作者:慧都控件网 |
10:26:42| 阅读 0次
概述:在项目中,我通过ASPxGridView来链接到LinqServerModeDataSource。麻烦的是,ASPxGridView不允许我们编辑数据,但是我必须支持编辑数据.本文主要介绍如何解决DevExpress ASPxGridView不支持编辑数据的问题。
在项目中,我通过ASPxGridView来链接到LinqServerModeDataSource。麻烦的是,ASPxGridView不允许我们编辑数据,但是我必须支持编辑数据,这个如何解决?
LinqServerModeDataSource与一个支持数据修改操作的数据源控件配合使用,可轻松地解决ASPxGridView的编辑数据问题。
首先, 我们得了解一下ASPxGridView是如何工作的. 当点击更新(删除)按钮时,表格视图将会调用它相关的数据源的更新(删除,插入)命令。当ASPxGridView连接到LinqServerModeDataSource时,你点击更新(删除)等这些按钮,将会触发&Specified Method is Not Supported&异常,&并且ASPxGridView 还会在EditForm的错误行上提示&Specified Method is Not Supported& 。这是因为 LINQ 定义了查询语言,但是它并没有定义如何进行数据修改,所以才会发生这个问题。
你应该做的是:
1) 处理ASPxGridView的 行更新, 行插入, 行删除事件;
2) 防止ASPxGridView 自己去处理修改操作;
3) 委托数据修改操作到额外的数据源上.
下面的代码显示了怎样实现数据的修改:
protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) {
LinqDataSource1.Update(e.Keys, e.NewValues, e.OldValues);
e.Cancel =
ASPxGridView1.CancelEdit();
protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) {
LinqDataSource1.Insert(e.NewValues);
e.Cancel =
ASPxGridView1.CancelEdit();
protected void ASPxGridView1_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e) {
LinqDataSource1.Delete(e.Keys, e.Values);
e.Cancel =
ASPxGridView1.CancelEdit();
本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:慧都控件网 []
本文地址:
400-700-1020
<input type="hidden" id="url" value="" />

我要回帖

更多关于 devexpress破解版下载 的文章

 

随机推荐