一、ASPxGridView屬性:概述設置(Settings)
1.1、Settings
<Settings GridLines="Vertical" : 網格樣式 Vertical, Both, None ShowGroupPanel="True" : 分組面板 ShowFooter="True" : 腳注面板 ShowFilterRow="True" : 過濾器行 ShowHeaderFilterButton="true" : 表頭過濾按鈕 ShowFilterBar :允許顯示過濾工具條 ShowGroupFooter="VisibleAlways" : 分組腳注面板 Hidden | VisibleIfExpand | VisibleAlways ShowPreview="true" : 預覽面板 ShowVerticalScrollBar="True" : 垂直滾動條 VerticalScrollableHeight="250" : 垂直滾動條 /> 1.2、行為設置(SettingsBehavior) <SettingsBehavior AllowDragDrop="False" : 允許托拽 ColumnResizeMode="Control" : 列寬度調整模式 AllowFocusedRow="True" : 鼠標點擊選擇行 AllowSort :允許排序 AllowGroup :允許分組 autoExpandAllGroups :自動展開所有組 ConfirmDelete :允許提交刪除 AllowMultiSelection :允許選擇多行 /> 1.3、分頁(SettingsPager) <SettingsPager PageSize="30" : 分頁大小 Mode="ShowAllRecords" : 展示模式 SEOFriendly="Enabled" : Search engine friendly Position="TopAndBottom" : 分頁控件位置 > <Summary AllPagesText="頁: {0} / {1} ({2}行)" /> </SettingsPager> 1.4、文本設置(SettingsText) <SettingsText Title="標題" EmptyDataRow="無數據" PopupEditFormCaption="編輯" ConfirmDelete="確定刪除?" /> 1.5、Loading 面板設置(SettingsLoadingPanel) <SettingsLoadingPanel Mode="ShowOnStatusBar" /> 1.6、編輯視圖設置(SettingsEditing) <SettingsEditing PopupEditFormWidth = "600px" NewItemRowPosition = "Bottom" Mode = "PopupEditForm" /> 1.7、編輯模式 SettingsEditing.Mode EditForm : 當前行轉化為表單,嵌入在行中 EditFormAndDisplayRow : 同EditForm,但保留當前行 Inline : 在當前行現場編輯 PopupEditForm : 彈出窗口編輯 1.8、行詳細設置(SettingDetail) <SettingDetail AllowOnlyOneMasterRowExpanded :允許只展開一列詳細信息 ShowDetailRow :允許顯示詳細列表 IsDetailGrid :允許顯示分組 >
1.9 動態選中某一行: AspxgridView1.Selection.SetSelection(i.true) 遍歷所有行: 聲明變量:DataRowView dv For(int i=0;i< AspxgridView1.VisbleRowCount;i++) { 選中行提取數據:
if(AspxgridView1.Selection.IsRowSelected(i)) { 行數據集
dv=(DataRowView)AspxgridView1.GetRow(i); } }
二、ASPxGridView樣式 & 格式
集中式樣式 <Styles> <Header HorizontalAlign="Center" /> : 標題居中對齊 <AlternatingRow Enabled="true"/> : 交錯行效果 <CommandColumn Paddings-Padding="1" /> : </Styles> 列樣式 <dxwgv:GridViewDataTextColumn FieldName="Total" UnboundType="Decimal"> <FooterCellStyle ForeColor="Brown"/> </dxwgv:GridViewDataTextColumn> 數字日期格式 金額 <dxwgv:GridViewDataTextColumn FieldName="UnitPrice" > <PropertiesTextEdit DisplayFormatString="c" /> </dxwgv:GridViewDataTextColumn> 時間 <dxwgv:GridViewDataDateColumn Caption="Time" FieldName="Time"> <PropertiesDateEdit DisplayFormatString="HH:mm:ss" /> <CellStyle HorizontalAlign="Right" /> </dxwgv:GridViewDataDateColumn> 圖像 <Images ImageFolder="~/App_Themes/Glass/{0}/"> <CollapsedButton Height="12px" Width="11px" /> <DetailCollapsedButton Height="9px" Width="9px" /> <PopupEditFormWindowClose Height="17px" Width="17px" /> </Images>
三、ASPxGridView分組 & 匯總 & 排序
間隔分組:將時間日期字段按個性分組,如年、月、日、周、季度、上周、下周..... <dxwgv:GridViewDataDateColumn FieldName="OrderDate" VisibleIndex="3" GroupIndex="0"> <Settings GroupInterval="DateYear"/> </dxwgv:GridViewDataDateColumn> 匯總 <TotalSummary> <dxwgv:ASPxSummaryItem FieldName="CompanyName" SummaryType="Count"/> <dxwgv:ASPxSummaryItem FieldName="Total" SummaryType="Sum" DisplayFormat="c"/> <dxwgv:ASPxSummaryItem FieldName="Quantity" SummaryType="Min" /> <dxwgv:ASPxSummaryItem FieldName="Quantity" SummaryType="Average" /> <dxwgv:ASPxSummaryItem FieldName="Quantity" SummaryType="Max" /> </TotalSummary> 分組匯總 <GroupSummary> <dxwgv:ASPxSummaryItem FieldName="Country" SummaryType="Count" /> <dxwgv:ASPxSummaryItem FieldName="Quantity" SummaryType="Sum" /> <dxwgv:ASPxSummaryItem FieldName="Total" SummaryType="Sum" DisplayFormat="{0:c}"/> </GroupSummary>
ASPxGridView 列: --------------------------------------------------------- 基本列(GridViewDataColumn) <dxwgv:GridViewDataColumn FieldName="Country" VisibleIndex="5" /> 其他列 <dx:GridViewDataTextColumn /> : 文本列 <dx:GridViewDataMemoColumn /> : 長文本列 <dx:GridViewDataImageColumn /> : 圖像列 <dx:GridViewDataBinaryImageColumn /> : 二進制圖像列 <dx:GridViewDataDateColumn /> : 日期列 <dx:GridViewDataTimeEditColumn /> : 時間列 <dx:GridViewDataComboBoxColumn /> : 組合框列 <dx:GridViewDataDropDownEditColumn /> : 下拉框編輯列? <dx:GridViewCommandColumn /> : 命令按鈕列 <dx:GridViewDataButtonEditColumn /> : 編輯按鈕列? <dx:GridViewDataCheckColumn /> : 復選框列 <dx:GridViewDataColorEditColumn /> : 色彩列 <dx:GridViewDataHyperLinkColumn /> : 超鏈接列 <dx:GridViewDataProgressBarColumn /> : 進度條列 <dx:GridViewDataSpinEditColumn /> : SpinEdit列 長文本列(GridViewDataMemoColumn) 編輯時展現為多行文本框 <dx:GridViewDataMemoColumn FieldName="Remarks" Caption="備注" EditCellStyle-BackColor="Yellow" // 行的背景顏色 PropertiesMemoEdit-Rows="4" // 添加或是修改時跨行 EditFormSettings-ColumnSpan="2" //添加或是修改時跨列 /> 超鏈接列(GridViewDataHyperLinkColumn) <dx:GridViewDataHyperLinkColumn FieldName="ArticleId" Caption="查看" > <PropertiesHyperLinkEdit Text="查看" TextFormatString="" /> </dx:GridViewDataHyperLinkColumn> 組合框列(GridViewDataComboBoxColumn) <dx:ASPxGridView OnCellEditorInitialize="grid_CellEditorInitialize"> <dxwgv:GridViewDataComboBoxColumn FieldName="City" VisibleIndex="2"> <PropertiesComboBox EnableSynchronization="False" EnableIncrementalFiltering="True" DropDownStyle="DropDown" /> </dxwgv:GridViewDataComboBoxColumn> </dx:ASPxGridView> protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e) { // 用下拉框展示國家下的所有城市綁定數據源 if(grid.IsEditing && e.Column.FieldName != "City" && !grid.IsNewRowEditing) { ASPxComboBox combo = e.Editor as ASPxComboBox; string country = (string)grid.GetRowValuesByKeyValue(e.KeyValue, "Country"); FillCityCombo(combo, country); } } 命令按鈕列(GridViewCommandColumn) <dx:ASPxGridView runat="server" KeyFieldName="ID" OnRowDeleting="gv_RowDeleting" OnRowUpdating="gv_RowUpdating" OnRowInserting="gv_RowInserting" <Columns> 一種是添加圖片的 <dx:GridViewCommandColumn VisibleIndex="0" ButtonType="Image" Caption=操作"> <EditButton Visible="True"> <Image ToolTip="修改" Url="Images/edit.png" /> </EditButton> <NewButton Visible="True"> <Image ToolTip="新建" Url="Images/new.png" /> </NewButton> <DeleteButton Visible="true"> <Image ToolTip="刪除" Url="Images/del.png" /> </DeleteButton> <CancelButton Visible="True"> <Image ToolTip="關閉" Url="Images/cancel.png" /> </CancelButton> <UpdateButton Visible="True"> <Image ToolTip="保存" Url="Images/update.png" /> </UpdateButton> <ClearFilterButton Visible="true"> <Image ToolTip="清空" Url="Images/del2.png" /> </ClearFilterButton> <HeaderStyle HorizontalAlign="Center" /> </dx:GridViewCommandColumn> 一種就只這種標准的: <dxwgv:GridViewCommandColumn> <EditButton Visible="True" Text="修改" /> <DeleteButton Visible="true" Text="刪除" /> <NewButton Visible="True" Text="新建" /> <CancelButton Visible="true" Text="取消" /> <UpdateButton Visible="true" Text="保存" /> <ClearFilterButton Visible="true" Text="取消過濾" /> </dxwgv:GridViewCommandColumn> </Columns> </dx:ASPxGridView> 代碼詳見《ASPxGridView.DataBind》 復選框列 <dxwgv:GridViewCommandColumn ShowSelectCheckbox="True"/> <dxwgv:GridViewCommandColumn ShowSelectCheckbox="True"> <HeaderTemplate> <input type="checkbox" onclick="grid.SelectAllRowsOnPage(this.checked);" title="選擇/放棄選擇本頁的所有行" /> </HeaderTemplate> <HeaderStyle HorizontalAlign="Center" /> </dxwgv:GridViewCommandColumn> 自定義按鈕 “刪除”按鈕 <dx:GridViewCommandColumn Caption="刪除"> <CustomButtons> <dx:GridViewCommandColumnCustomButton ID="DeleteFile" Text="刪除" /> </CustomButtons> </dx:GridViewCommandColumn> protected void gv_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e) { if (e.ButtonID == "DeleteFile") { long fileId = Convert.ToInt64(gv.GetRowValues(e.VisibleIndex, "FileId")); string fileName = gv.GetRowValues(e.VisibleIndex, "FileName").ToString(); string filePath = Common.Config.Path.PhysicalUploadFolder + gv.GetRowValues(e.VisibleIndex, "FilePath").ToString(); System.IO.File.Delete(filePath); using (DbFile db = new DbFile()) db.DelFile(fileId); ShowData(this.FileBatchId); } } “復制行”按鈕 <dx:ASPxGridView runat="server" OnCustomButtonCallback="grid_CustomButtonCallback"> <Columns> <dxwgv:GridViewCommandColumn VisibleIndex="0"> <CustomButtons> <dxwgv:GridViewCommandColumnCustomButton Text="復制行" ID="Copy" /> </CustomButtons> </dxwgv:GridViewCommandColumn> </Columns> </dx:ASPxGridView> Hashtable copiedValues; protected void grid_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e) { if(e.ButtonID == "Copy") { copiedValues = new Hashtable(); foreach(string fieldName in copiedFields) copiedValues[fieldName] = grid.GetRowValues(e.VisibleIndex, fieldName); grid.AddNewRow(); } } protected void grid_InitNewRow(object sender, DevExpress.Web.Data.ASPxDataInitNewRowEventArgs e) { if(copiedValues != null) foreach(string fieldName in copiedFields) e.NewValues[fieldName] = copiedValues[fieldName]; } 非綁定列(GridViewDataTextColumn) <dxwgv:GridViewDataTextColumn FieldName="Total" UnboundType="Decimal" /> protected void grid_CustomUnboundColumnData(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDataEventArgs e) { // Total = UnitPrice * Quantity if(e.Column.FieldName == "Total") { decimal price = (decimal)e.GetListSourceFieldValue("UnitPrice"); int quantity = Convert.ToInt32(e.GetListSourceFieldValue("Quantity")); e.Value = price * quantity; } } 模板列(GridViewDataTextColumn) onhtmlrowcreated="grid_HtmlRowCreated" <dxwgv:GridViewDataTextColumn Name="Percent" Caption="Change" FieldName="Change"> <DataItemTemplate> <asp:Image ID="changeImage" runat="server" ImageUrl="~/Images/arGreen.gif" Visible="false" GenerateEmptyAlternateText="True" /> <asp:Label ID="changePercent" runat="server" Text="" /> <a href="JavaScript:void(0);" onclick="OnMoreInfoClick(this, '<%# Container.KeyValue %>')">更多...</a> <a href="../pages/download.ashx?path=../uploads/<%#Eval("FilePath")%>&name=<%#Eval("FileName") %> " >下載</a> </DataItemTemplate> </dxwgv:GridViewDataTextColumn> protected void grid_HtmlRowCreated(object sender, ASPxGridViewTableRowEventArgs e) { if (!grid.IsEditing && e.RowType == DevExpress.Web.ASPxGridView.GridViewRowType.Data) { // 操作 Label 控件 Label label = grid.FindRowCellTemplateControl(e.VisibleIndex, null, "changePercent") as Label; decimal change = (decimal)grid.GetRowValues(e.VisibleIndex, "Change"); label.Text = string.Format("{0:p}", change); // 操作 Image 控件 System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)grid.FindRowCellTemplateControl(e.VisibleIndex, null, "changeImage"); img.Visible = false; if(change != 0) { img.Visible = true; img.ImageUrl = change < 0 ? "~/Images/arRed.gif" : "~/Images/arGreen.gif"; label.ForeColor = change < 0 ? Color.Red : Color.Green; } } } 注:模板列中的事件如何寫?手工寫事件,如btn.OnClick += ...; 注:視圖模板請參考文檔《ASPxGridView.Templates》 ASPxGridView 事件 RowCreated(創建行數據時觸發,類似 GridView 的 DataItemCreate 事件) protected void grid_HtmlRowCreated(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e) { if(e.RowType != DevExpress.Web.ASPxGridView.GridViewRowType.Data) return; // 設置模板列lable控件值 Label label = grid.FindRowCellTemplateControl(e.VisibleIndex, null, "changePercent") as Label; decimal change = (decimal)grid.GetRowValues(e.VisibleIndex, "Change"); label.Text = string.Format("{0:p}", change); // 設置模板列image控件的圖像 System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)grid.FindRowCellTemplateControl(e.VisibleIndex, null, "changeImage"); img.Visible = false; if(change != 0) { img.Visible = true; img.ImageUrl = change < 0 ? "~/Images/arRed.gif" : "~/Images/arGreen.gif"; label.ForeColor = change < 0 ? Color.Red : Color.Green; } } HtmlRowPrepared(行准備?可在此設置行的展示效果,如背景) protected void grid_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e) { bool hasError = e.GetValue("FirstName").ToString().Length <= 1; hasError = hasError || e.GetValue("LastName").ToString().Length <= 1; hasError = hasError || !e.GetValue("Email").ToString().Contains("@"); hasError = hasError || (int)e.GetValue("Age") < 18; DateTime arrival = (DateTime)e.GetValue("ArrivalDate"); hasError = hasError || DateTime.Today.Year != arrival.Year || DateTime.Today.Month != arrival.Month; if(hasError) { e.Row.ForeColor = System.Drawing.Color.Red; } } UnboundColumnData (非綁定列數據填充) protected void grid_CustomUnboundColumnData(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDataEventArgs e) { if(e.Column.FieldName == "Total") { decimal price = (decimal)e.GetListSourceFieldValue("UnitPrice"); int quantity = Convert.ToInt32(e.GetListSourceFieldValue("Quantity")); e.Value = price * quantity; } } CustomColumnDisplayText(定制列文本展示) protected void grid_CustomColumnDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDisplayTextEventArgs e) { if(object.Equals(e.Column, grid.Columns["Size"])) e.DisplayText = GetSizeDisplayText(e.Value); } SummaryDisplayText(合計行文本展示) protected void grid_SummaryDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewSummaryDisplayTextEventArgs e) { if(e.Item.FieldName == "Size") { e.Text = GetSizeDisplayText(e.Value); } } HeaderFilterFillItems(自定義過濾器處理邏輯) protected void grid_HeaderFilterFillItems(object sender, ASPxGridViewHeaderFilterEventArgs e) { if(object.Equals(e.Column, grid.Columns["Total"])) { PrepareTotalFilterItems(e); return; } if(object.Equals(e.Column, grid.Columns["Quantity"])) { PrepareQuantityFilterItems(e); return; } } --------------------------------------------------------- 回調處理 --------------------------------------------------------- CustomCallback(Ajax 回調處理) <select id="selGridLayout" onchange="grid.PerformCallback(this.value);" > <option selected="selected" value="0">Country</option> <option value="1">Country, City</option> <option value="2">Company Name</option> </select> protected void grid_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e) { int layoutIndex = -1; if(int.TryParse(e.Parameters, out layoutIndex)) ApplyLayout(layoutIndex); // 更換布局 } CustomButtonCallback(定制按鈕的ajax回調處理) protected void grid_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e) { if(e.ButtonID != "Copy") return; copiedValues = new Hashtable(); foreach(string fieldName in copiedFields) copiedValues[fieldName] = grid.GetRowValues(e.VisibleIndex, fieldName); grid.AddNewRow(); } --------------------------------------------------------- 編輯視圖 --------------------------------------------------------- InitNewRow(新建行的數據初始化處理) protected void grid_InitNewRow(object sender, DevExpress.Web.Data.ASPxDataInitNewRowEventArgs e) { if(copiedValues == null) return; foreach(string fieldName in copiedFields) { e.NewValues[fieldName] = copiedValues[fieldName]; } } CellEditorInitialize(編輯器初始化) protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e) { if(grid.IsEditing && !grid.IsNewRowEditing && e.Column.FieldName == "City") { string country = (string)grid.GetRowValuesByKeyValue(e.KeyValue, "Country"); ASPxComboBox combo = e.Editor as ASPxComboBox; FillCityCombo(combo, country); combo.Callback += new CallbackEventHandlerBase(cmbCity_OnCallback); } } StartRowEditing(開始編輯) protected void grid_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) { if(!grid.IsNewRowEditing) { grid.DoRowValidation(); } } RowValidating (行數據驗證) protected void grid_RowValidating(object sender, DevExpress.Web.Data.ASPxDataValidationEventArgs e) { foreach(GridViewColumn column in grid.Columns) { GridViewDataColumn dataColumn = column as GridViewDataColumn; if(dataColumn == null) continue; if(e.NewValues[dataColumn.FieldName] == null) { e.Errors[dataColumn] = "Value can't be null."; } } if(e.Errors.Count > 0) e.RowError = "Please, fill all fields."; if(e.NewValues["FirstName"] != null && e.NewValues["FirstName"].ToString().Length < 2) { AddError(e.Errors, grid.Columns["FirstName"], "First Name must be at least two characters long."); } if(e.NewValues["LastName"] != null && e.NewValues["LastName"].ToString().Length < 2) { AddError(e.Errors, grid.Columns["LastName"], "Last Name must be at least two characters long."); } if(e.NewValues["Email"] != null && !e.NewValues["Email"].ToString().Contains("@")) { AddError(e.Errors, grid.Columns["Email"], "Invalid e-mail."); } int age = 0; int.TryParse(e.NewValues["Age"] == null ? string.Empty : e.NewValues["Age"].ToString(), out age); if(age < 18) { AddError(e.Errors, grid.Columns["Age"], "Age must be greater than or equal 18."); } DateTime arrival = DateTime.MinValue; DateTime.TryParse(e.NewValues["ArrivalDate"] == null ? string.Empty : e.NewValues["ArrivalDate"].ToString(), out arrival); if(DateTime.Today.Year != arrival.Year || DateTime.Today.Month != arrival.Month) { AddError(e.Errors, grid.Columns["ArrivalDate"], "Arrival date is required and must belong to the current month."); } if(string.IsNullOrEmpty(e.RowError) && e.Errors.Count > 0) e.RowError = "Please, correct all errors."; if (e.NewValues["Name"] == null) { e.RowError = "功能名稱不能為空,請填寫功能名稱"; return;
} if (e.NewValues["Remarks"] == null) {
e.RowError = "功能備注不能為空,請填寫功能備注"; return; } } 行修改事件 RowUpdating protected void gvFunction_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) { functionModel.Name = e.NewValues[0].ToString();// 組名稱 functionModel.Remarks = e.NewValues[1].ToString(); // 組備注 functionModel.FunctionId = e.Keys[0].ToString();// ID rmodel = client.FunctionEdit(functionModel);// 返回類型表 gvFunction.CancelEdit();//結束編輯狀態 e.Cancel = true; FunctionDataBind();//更新數據 } 行添加事件RowInserting protected void gvFunction_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) { functionModel.Name = e.NewValues[0].ToString();// 組名稱 functionModel.Remarks = e.NewValues[1].ToString(); // 組備注 rmodel = client.FunctionSubmit(functionModel);// 返回類型表 gvFunction.CancelEdit();//結束編輯狀態 e.Cancel = true; FunctionDataBind();//更新數據 } 行刪除事件RowDeleting protected void gvFunction_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e) {
functionModel.FunctionId = e.Keys[0].ToString();// ID client.FunctionInfoDelete(functionModel); gvFunction.CancelEdit();//結束編輯狀態 e.Cancel = true; FunctionDataBind();//更新數據 } 初始化回調事件 Callback protected void callbackPanel_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e) { strGroupID = e.Parameter.ToString(); DataBindInfo();// 初始化頁面信息 SelectUser();// 查找組里面的所有用戶 DataCheck(); } 獲取行展開改變事件 DetailRowExpandedChanged protected void gvGroup_DetailRowExpandedChanged(object sender, ASPxGridViewDetailRowEventArgs e) {
SYSolution_WebUI.ServiceReference.GroupInfo groupInfoModel = (SYSolution_WebUI.ServiceReference.GroupInfo)((ASPxGridView)sender).GetRow(e.VisibleIndex);// 獲取選中行實體 ASPxGridView gv = (ASPxGridView)gvGroup.FindDetailRowTemplateControl(e.VisibleIndex, "gvGroupName"); // 獲取模板內aspxgridView ID名稱 SYSolution_WebUI.ServiceReference.GroupInfo[] model = client.GroupSelUserList("GroupId='" + groupInfoModel.GroupId + "'");// 通過組ID值獲取實體對象 if (model[0].UserInfoList != null && gv != null)// 當用用戶列表值與子aspxgridView不為空 { gv.DataSource = model[0].UserInfoList; // 子aspxgridView綁定數據源 gv.DataBind();
}
if (model[0].UserInfoList[0].Name == "") // 如果子aspxgridView中的用戶列表為空時不顯示 不展開 { gvGroup.SettingsDetail.AllowOnlyOneMasterRowExpanded = false; } } 排序事件中重新綁定數據 BeforeColumnSortingGrouping protected void gvGroup_BeforeColumnSortingGrouping(object sender, ASPxGridViewBeforeColumnGroupingSortingEventArgs e) {
gvGroup.DetailRows.CollapseAllRows();// 關閉所有DetailoRow gvGroup.DetailRows.ExpandRow(3); } 重綁定數據使用時先選中行,再查看 FocusedRowChanged Protected void aspxGridView_FocusedRowChanged(object sender,EventArgs e){} 行列綁定數據事件CustomUnboundColumnData Protected void aspxGridView_CustomUnboundColumnData(object sender,EventArgs e){} .隱藏編輯列,在DataBound事件中 protected void ASPxGridView1_DataBound(object sender, EventArgs e) { if(ASPxGridView1.VisibleRowCount>0) { //ASPxGridView1.Columns[命令列索引] (ASPxGridView1.Columns[4] as GridViewCommandColumn).NewButton.Visible = false; } }