DevExpress_常用控制元件17_GridControl
2.3 GridControl
1、 如何解決單擊記錄整行選中的問題
View->OptionsBehavior->EditorShowMode 設定為:Click
可選值:Default / MouseDown / MouseUp / Click
2、 如何新增一條記錄
(1)、gridView.AddNewRow()
(2)、實現 gridView_InitNewRow 事件
3、如何解決 GridControl 記錄 能獲取 而 沒有顯示出來的問題
gridView.populateColumns();
4、如何讓行 只能選擇 而不能編輯(或編輯某一單元格)
(1)、View->OptionsBehavior->EditorShowMode 設定為:Click
(2)、View->OptionsBehavior->Editable 設定為:false
5、如何禁用 GridControl 中 單擊列 彈出右鍵選單
設定 Run Design->OptionsMenu->EnableColumnMenu 設定為:false
6、如何隱藏 GridControl 的 GroupPanel 表頭
設定 Run Design->OptionsView->ShowGroupPanel 設定為:false
7、如何顯示水平滾動條
a. 設定 this.gridView.OptionsView.ColumnAutoWidth = false;
b. 列表寬度自適應內容
gridview1.BestFitColumns();
8、如何定位到第一條資料/記錄?
呼叫方法: this.gridView.MoveFirst();
9、如何定位到下一條資料/記錄?
呼叫方法: this.gridView.MoveNext();
10、如何定位到最後一條資料/記錄?
呼叫方法: this.gridView.MoveLast();
11、如何讓 各列頭 禁止移動?
設定 gridView1.OptionsCustomization.AllowColumnMoving
12、如何讓 各列頭 禁止排序?
設定 gridView1.OptionsCustomization.AllowSort = false;
13、如何禁止 各列頭 改變列寬?
設定 gridView1.OptionsCustomization.AllowColumnResizing = false;
14、拖動滾動條時 固定某一列
設定Columns, 選擇要固定的列,設定Fixed屬性, 可以選擇: a. 固定在左邊、 b. 固定在右邊、 c. 不固定。 |
15、設定成 一次選擇一行,且不能被編輯
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
16、如何顯示行號?
private void gvPayList_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e){
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
if(e.Info.IsRowIndicator){
if(e.RowHandle >= 0){
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}else if(e.RowHandle > -1000 && e.RowHandle < 0){
e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
e.Info.DisplayText = "G" + e.RowHandle.ToString();
}
}
}
17、如何禁用 GridControl 中 列頭的過濾器
過濾器如下圖所示:
設定 Run Design->OptionsCustomization->AllowFilter 設定為:false
18、設計資料來源 並 繫結欄位:
DataTable dt = new DataTable();
dt.Columns.Add("Name", System.Type.GetType("System.String"));
dt.Columns.Add("Sex", System.Type.GetType("System.String"));
dt.Columns.Add("Age", System.Type.GetType("System.String"));
DataRow row = dt.NewRow();;
row["Name"] = "mathilda";
row["Sex"] = "loli";
row["Age"] = "12";
dt.Rows.Add(row);
// 繫結欄位
gridView1.Columns[1].FieldName = "Sex";
gridView1.Columns[2].FieldName = "Age";
gridView1.Columns[0].FieldName = "Name";
gridControl1.DataSource = dt;
19、如何在查詢得到 0 條記錄時顯示自定義的字元提示/顯示 如圖所示:
方法如下:
// When no Records Are Being Displayed
private void gridView1_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e)
{
// 方法一(此方法為GridView設定了資料來源繫結時,可用)
ColumnView columnView = sender as ColumnView;
BindingSource bindingSource = this.gridView1.DataSource as BindingSource;
if(bindingSource.Count == 0){
string str = "沒有查詢到你所想要的資料!";
Font f = new Font("宋體", 10, FontStyle.Bold);
var tmpLeft = e.Bounds.Left + 5;
var tmpTop = e.Bounds.Top + 5;
var tmpWidth = e.Bounds.Width - 5;
var tmpHeight = e.Bounds.Height - 5;
Rectangle r = new Rectangle(tmpLeft, tmpTop, tmpWidth, tmpHeight);
e.Graphics.DrawString(str, f, Brushes.Black, rect);
}
}
// 方法二(此方法 適用於: GridView 沒有設定資料來源時)
if (this._flag){
if (this.gridView1.RowCount == 0){
string str = "沒有查詢到你所想要的資料!";
Font f = new Font("宋體", 10, FontStyle.Bold);
var tmpLeft = e.Bounds.Left + 5;
var tmpTop = e.Bounds.Top + 5;
var tmpWidth = e.Bounds.Width - 5;
var tmpHeight = e.Bounds.Height - 5;
Rectangle r = new Rectangle(tmpLeft, tmpTop, tmpWidth, tmpHeight);
e.Graphics.DrawString(str, f, Brushes.Black, r);
}
}
20.獲取 選定行,指定列 單元格的內容
gridView1.GetRowCellValue(pRows[0], ColumName).ToString ();
21.分組顯示
OptionsView>OptionsBehavior>AutoExpandAllGroups = True
選擇要分組的列,將GroupIndex屬性設定為0
22.格式化資料
private void gvList_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e){
if (this.gvList.FocusedColumn.FieldName == "passQty"){
string passQty = e.Value.ToString().Trim();
int receiveQty = orderDetailList[this.gvList.FocusedRowHandle].qty;
if (!JXType.IsIntBigThanZero(passQty)){
e.Valid = false;
e.ErrorText = "合格數量必須為大於等於0, 並且小於等於接貨數量的整數!";
}else{
if (int.Parse(passQty) > receiveQty){
e.Valid = false;
e.ErrorText = "合格數量必須為大於0, 並且小於等於接貨數量的整數!";
}
}
}
}
24、動態新增列
// 動態新增列
DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();
Col1.FieldName = "Name";
Col1.Caption = "名字";
Col1.Visible = false;
Col1.VisibleIndex = gvCountry.Columns.Count;
gvCountry.Columns.Add(Col1);
25、設定自動增加的行號
private void gridview_CustomDrawRowIndicator(object sender,DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e){
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
if(e.Info.IsRowIndicator){
if(e.RowHandle >= 0){
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}else if(e.RowHandle > -1000 && e.RowHandle < 0){
e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
e.Info.DisplayText = "G" + e.RowHandle.ToString();
}
}
}
26、GridControl中有5種 view 特效樣式,
普通的是GridView,
然後是CardView、
BandedView、
Advanced BandedView、
LayoutView;
共5種。
1)、view組中把OptionView下的ViewMode 設定成“Carousel”就達到這種“旋轉木馬”式 的特效了
2)、layoutView1.OptionsCarouselMode.PitchAngle 這個屬性決定“旋轉木馬”的:
pitch angle 螺距角;
螺旋角;
螺旋升角;
俯仰角;
傾角;
節錐半形
3)、Roll Angle 屬性決定著 傾斜角度
4)、指定資料來源,顯示資料:
//顯示資料
private void showData(List<Girl > list){
DataTable table = new DataTable("Girl");
table.Columns.Add("Name", System.Type.GetType("System.String"));
table.Columns.Add("Anime", System.Type.GetType("System.String"));
tablet.Columns.Add("PhotoName", System.Type.GetType("System.Byte[]"));
for (int i = 0; i < list.Count; i++){
DataRow row = table.NewRow();
row["Name"] = list[i].Name;
row["Anime"] = list[i].Anime;
string imagePath = @"D:\C#\photos\" + list[i].PhotoPath;
row["PhotoName"] = encapsulation_getImageByte(imagePath);
table.Rows.Add(row);
}
// 核心程式碼
gridControl1.DataSource = table;
}
// 返回圖片的位元組流byte[]
private byte[] encapsulation_getImageByte(string imagePath){
FileStream files = new FileStream(imagePath, FileMode.Open);
byte[] imgByte = new byte [files.Length];
files.Read(imgByte, 0, imgByte.Length);
files.Close();
return imgByte;
}
27、檢查資料的有效性
在gridview的ValidateRow事件中加入檢查程式碼:
#region 檢查資料
private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e){
GridView view = sender as GridView;
view.ClearColumnErrors();
if (view.GetRowCellValue(e.RowHandle, "Birthday") == DBNull.Value){
e.Valid = false;
view.SetColumnError(view.Columns["Birthday"], "必須指定出生日期");
}
}
28、設某一列 標題 和 文字 居中顯示
gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
29、列表過濾條件多選
列名.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList
30、隔行換色的方法
// 設定奇數行顏色,預設也是白色 可以省略
gridView1.Appearance.OddRow.BackColor = Color.White;
// 使所有的奇數行 允許 應用 介面上的設定
gridView1.OptionsView.EnableAppearanceOddRow = true;
// 設定偶數行顏色
gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke;
// 使所有的偶數行 允許 應用 介面上的設定
gridView1.OptionsView.EnableAppearanceEvenRow = true;
31、刪除選中行,新增行
刪除選中行, 可通過DeleteSelectedRows()方法,
新增行, 可通過AddNewRow()方法;
具體示例程式碼如下:
if (gridView1.SelectedRowsCount > 0)
{
gridView1.DeleteSelectedRows();
}
32、設定只讀屬性
通過OptionColumn的readOnly屬性,把某一列設定為只讀屬性;
gridView1.Columns[0].OptionsColumn.ReadOnly = true;
33.合併表頭
介面操作,如圖所示:
程式碼操作如下:
示例程式碼1:
private DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGridView1;
private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBand1;
private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn1;
private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn2;
private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBand2;
private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn3;
private DevExpress.XtraGrid.Columns.GridColumn gridColumn5;
private DevExpress.XtraGrid.GridControl gridControl1;
private void InitializeComponent(){
this.gridControl1 = new DevExpress.XtraGrid.GridControl();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.gridColumn5 = new DevExpress.XtraGrid.Columns.GridColumn();
this.bandedGridView1 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridView();
this.gridColumn1 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
this.gridColumn2 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
this.gridColumn3 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
this.gridBand1 = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
this.gridBand2 = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bandedGridView1)).BeginInit();
this.SuspendLayout();
// gridControl1
this.gridControl1.Location = new System.Drawing.Point(74, 46);
this.gridControl1.MainView = this.bandedGridView1;
this.gridControl1.Name = "gridControl1";
this.gridControl1.Size = new System.Drawing.Size(400, 200);
this.gridControl1.TabIndex = 0;
this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
this.bandedGridView1});
// button1
this.button1.Location = new System.Drawing.Point(88, 333);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
// button2
this.button2.Location = new System.Drawing.Point(273, 332);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 2;
this.button2.Text = "button2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
// gridColumn5
this.gridColumn5.Name = "gridColumn5";
// bandedGridView1
this.bandedGridView1.Bands.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.GridBand[] {
this.gridBand1,
this.gridBand2});
this.bandedGridView1.Columns.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn[] {
this.gridColumn1,
this.gridColumn2,
this.gridColumn3});
this.bandedGridView1.GridControl = this.gridControl1;
this.bandedGridView1.Name = "bandedGridView1";
// gridColumn1
this.gridColumn1.Caption = "Name";
this.gridColumn1.Name = "gridColumn1";
this.gridColumn1.Visible = true;
// gridColumn2
this.gridColumn2.Caption = "Sex";
this.gridColumn2.Name = "gridColumn2";
this.gridColumn2.Visible = true;
// gridColumn3
this.gridColumn3.Caption = "Age";
this.gridColumn3.Name = "gridColumn3";
this.gridColumn3.Visible = true;
// gridBand1
this.gridBand1.Caption = "gridBand1";
this.gridBand1.Columns.Add(this.gridColumn1);
this.gridBand1.Columns.Add(this.gridColumn2);
this.gridBand1.Name = "gridBand1";
this.gridBand1.VisibleIndex = 0;
this.gridBand1.Width = 150;
// gridBand2
this.gridBand2.Caption = "gridBand2";
this.gridBand2.Columns.Add(this.gridColumn3);
this.gridBand2.Name = "gridBand2";
this.gridBand2.VisibleIndex = 1;
this.gridBand2.Width = 75;
// Form8
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(590, 429);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.gridControl1);
this.Name = "Form8";
this.Text = "Form8";
((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bandedGridView1)).EndInit();
this.ResumeLayout(false);
}
示例程式碼2:
/// 初始化表格
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraEditors.Repository;
private void InitGrid(){
// advBandedGridView1 是表格上的預設檢視,
// 注意這裡宣告的 是:BandedGridView
BandedGridView view = advBandedGridView1 as BandedGridView;
// 開始檢視的編輯,防止觸發其他事件
view.BeginUpdate();
// 開始資料的編輯
view.BeginDataUpdate();
view.Bands.Clear();
// 因為有Band列了,所以把ColumnHeader隱藏
view.OptionsView.ShowColumnHeaders = false;
// 新增列標題
GridBand bandID = view.Bands.AddBand("ID");
// 隱藏ID列
bandID.Visible = false;
// 這是合併表頭居中顯示
GridBand bandName = view.Bands.AddBand("姓名");
GridBand bandSex = view.Bands.AddBand("性別");
GridBand bandBirth = view.Bands.AddBand("出生日期");
GridBand bandScore = view.Bands.AddBand("分數");
GridBand bandMath = bandScore.Children.AdBand("數學");
GridBand bandChinese = bandScore.Children.AddBand("語文");
GridBand bandEnglish = bandScore.Children.AddBand("英語");
GridBand bandSubTotal = bandScore.Children.AddBand("小計");
GridBand bandRemark = view.Bands.AddBand("備註");
bandFile.AppearanceHeader.TextOptions.HAlignment =
DevExpress.Utils.HorzAlignment.Center;
// 結束資料的編輯
view.EndDataUpdate();
// 結束檢視的編輯
view.EndUpdate();
}
具體可參看:
DevExpress GridControl 合併表頭