DEVexpress GridControl 屬性設置


1、 如何解決單擊記錄整行選中的問題

View->OptionsBehavior->EditorShowMode 設置為: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、如何禁用 GridControl 中列頭的過濾器 過濾器如下圖所示:     

設置 Run Design->OptionsCustomization->AllowFilter 設置為:false

8、如何在查詢得到 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);

Rectangle r = new Rectangle(e.Bounds.Top + 5, e.Bounds.Left + 5, e.Bounds.Right - 5, e.Bounds.Height - 5);

e.Graphics.DrawString(str, f, Brushes.Black, r); }

//方法二(此方法為GridView沒有設置數據源綁定時,使用,一般使用此種方 法)

if (this._flag)

 { if (this.gridView1.RowCount == 0)

 { string str = "沒有查詢到你所想要的數據!"; Font f = new Font("宋體", 10, FontStyle.Bold);

Rectangle r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5);

e.Graphics.DrawString(str, f, Brushes.Black, r); } } }

9、如何顯示水平滾動條?或

設置 this.gridView.OptionsView.ColumnAutoWidth = false;

.....列表寬度自適應內容

gridview1.BestFitColumns();

10、如何定位到第一條數據/記錄?

設置 this.gridView.MoveFirst()

11、如何定位到下一條數據/記錄?
設置 this.gridView.MoveNext()

12、如何定位到最后一條數據/記錄?

設置 this.gridView.MoveLast()

13、設置成一次選擇一行,並且不能被編輯

this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

 this.gridView1.OptionsBehavior.Editable = false;

this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;

 14、如何顯示行號?
  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 < 0 && e.RowHandle > -1000)
                {
                    e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                    e.Info.DisplayText = "G" + e.RowHandle.ToString();
                }
            }
        }

15、如何讓各列頭禁止移動?

設置 gridView1.OptionsCustomization.AllowColumnMoving = false;

16、如何讓各列頭禁止排序?

設置 gridView1.OptionsCustomization.AllowSort = false;

17、如何禁止各列頭改變列寬?

設置 gridView1.OptionsCustomization.AllowColumnResizing = false;

 

18.拖動滾動條時固定某一列

 

設置Columns,選擇要固定的列。設置Fixed屬性,可以選擇:固定在左邊、固定在右邊、不固定。

 

19.獲取選定行,指定列單元格的內容

      return gridView1.GetRowCellValue(pRows[0], ColumName).ToString ();

20.分組顯示

OptionsView>OptionsBehavior>AutoExpandAllGroups = True
選擇要分組的列,將GroupIndex屬性設置為0

 

21.格式化數據

 

       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小於等於接貨數量的整數!";
                    }
                }
            }

}

22.合並表頭

  ///初始化表格

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();

 

            view.OptionsView.ShowColumnHeaders = false;                         //因為有Band列了,所以把ColumnHeader隱藏
            //添加列標題
      //添加列標題
            GridBand bandID = view.Bands.AddBand("ID");
            bandID.Visible = false; //隱藏ID列
            GridBand bandName = view.Bands.AddBand("姓名");
            GridBand bandSex = view.Bands.AddBand("性別");
            GridBand bandBirth = view.Bands.AddBand("出生日期");
            GridBand bandScore = view.Bands.AddBand("分數");
            GridBand bandMath = bandScore.Children.AddBand("數學");
            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();   //結束視圖的編輯
        }

具體可看 

dev gridcontrol 合並表頭

23.   //動態添加列
            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);

 

24。設置自動增加的行號

  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 < 0 && e.RowHandle > -1000)
                {
                    e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                    e.Info.DisplayText = "G" + e.RowHandle.ToString();
                }
            }

25.特效:gridcontrol中有5種view 型式,普通的是gridview,然后分別為cardview、BandedView、Advanced BandedView、LayoutView;共5種。

  1)、view組中把OptionView下的viewmode 設置成“Carousel”就達到這種“旋轉木馬”式的gridcontrol view 特效了
  2)、layoutView1.OptionsCarouselMode.PitchAngle 這個屬性決定“旋轉木馬”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 傾角; 節錐半角 
  3)、Roll Angle 屬性決定着 傾側角度
  4)、指定數據源,顯示數據:
  //顯示數據
        private void showData(List<Employee > list)
        {
            DataTable dt = new DataTable("OneEmployee");
            dt.Columns.Add("Caption", System.Type.GetType("System.String"));
            dt.Columns.Add("Department", System.Type.GetType("System.String"));
            dt.Columns.Add("PhotoName", System.Type.GetType("System.Byte[]"));

            for (int i = 0; i < list.Count; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Caption"] = list[i].Name;
                dr["Department"] = list[i].Department;
                string imagePath = @"D:\C#\photos\" + list[i].PhotoPath;
                dr["PhotoName"] = getImageByte(imagePath);
                dt.Rows.Add(dr);
            }
            gridControl1.DataSource = dt;
        }

        //返回圖片的字節流byte[]
        private byte[] 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;
        }

 

26.檢查數據的有效性

  在gridview的ValidateRow事件中加入檢查代碼:
  #region 檢查數據
  private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e)
  {
  GridView view = sender as GridView;
  view.ClearColumnErrors();

  if (view.GetRowCellValue(e.RowHandle, "ReceiveDate") == DBNull.Value)
  {
  e.Valid = false;
  view.SetColumnError(view.Columns["ReceiveDate"], "必須指定日期");
  }

  }

27.設某一列文字和標題局中顯示                  
   gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
   gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

 

28.列表過濾條件多選

列名.OptionsFilter.FilterPopupMode= DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList

29.隔行換色的方法

  this.gridView1.Appearance.OddRow.BackColor = Color.White;  // 設置奇數行顏色 // 默認也是白色 可以省略 
this.gridView1.OptionsView.EnableAppearanceOddRow = true;   // 使能 // 和和上面綁定 同時使用有效 
this.gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; // 設置偶數行顏色 
this.gridView1.OptionsView.EnableAppearanceEvenRow = true;   // 使能 // 和和上面綁定 同時使用有效

 

PS:補充項目:

 

//不顯示內置的導航條。
            gc1.UseEmbeddedNavigator = false;

            //不顯示分組的面板
            gv1.OptionsView.ShowGroupPanel = false;
            gv2.OptionsView.ShowGroupPanel = false;

            //自動改變行高適應內容
            gv1.OptionsView.RowAutoHeight = true;
            gv2.OptionsView.RowAutoHeight = true;

            //允許自動合並單元格
            gv1.OptionsView.AllowCellMerge = true;

            //如果主從表中,沒有找到從表內容也要顯示(默認是不顯示的)
            gv1.OptionsDetail.AllowExpandEmptyDetails = true;

            //顯示自動篩選行(效果跟Excel的自動篩選差不多)
            gv2.OptionsView.ShowAutoFilterRow = true;

            //使得GridView不能編輯
            gv1.OptionsBehavior.Editable = false;
            gv2.OptionsBehavior.Editable = false;

            //內置編輯器顯示的模式
            gv1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;

            //主從表顯示的功能是否可用
            //gv1.OptionsDetail.EnableMasterViewMode = false;

            //如果顯示了主從表,每點開個加號,就會顯示一個Tabs,里面往往顯示了兩個面板。
            //事實上沒必要這樣干的。一般選擇關閉。關閉的對象是主GridView的此項屬性。
            gv1.OptionsDetail.ShowDetailTabs = false;

 

PS:處理主從表顯示

//設置連接字符串
            DbHelperSQL.ConnectionString = DbHelperSQL.CreateConnectionString(@"BUDDHAS\SQLEXPRESS", "sa", "00000", "RTDMES");

            DataSet ds = new DataSet();
            //父GridView的數據
            string sql = "select sc_prno,sc_prna from mespb04h";
            DbHelperSQL.QueryD(sql,ds,"main");

            //子GridView的數據
            sql = "select pa_name,pa_no,sc_prno from mespb09h";
            DbHelperSQL.QueryD(sql,ds,"son");

            //這個是顯示主從表的關鍵,

      一、GridControl通過檢查DataSet.Relations的內容來分析數據
            //二、關鍵名必須與設計GridView的層級關系的level name相同,否則,結果在意料之外。
            DataRelation relation = new DataRelation("aa", 
                                                     ds.Tables["main"].Columns["sc_prno"], 
                                                     ds.Tables["son"].Columns["sc_prno"]);
            
            ds.Relations.Add(relation);

            //這也是一個關鍵,不能直接設為:ds,必須指明到表。
            gc1.DataSource = ds.Tables["main"];

 

//添加分組統計字段
gridView1.GroupSummary.Add(SummaryItemType.Count, "Product Name", gridView1.Columns["Product Name"]);
gridView1.GroupSummary.Add(SummaryItemType.Average, "Unit Price", gridView1.Columns["Unit Price"]);

//設置分組統計字段的顯示格式
((GridSummaryItem)gridView1.GroupSummary[gridView1.GroupSummary.Count - 1]).DisplayFormat = "AVR={0:c}";

//設置分組字段
gridView1.Columns["Discontinued"].GroupIndex = 0;

//打開所有分組
gridView1.ExpandAllGroups();

//為控件畫邊框
ControlPaint.DrawBorder3D(e.Graphics,
                          r, 
                          (e.Info.State == DevExpress.Utils.Drawing.ObjectState.Pressed ? Border3DStyle.SunkenOuter

: Border3DStyle.RaisedInner));


//焦點單元格的列
gridview1.FocusedColumn

//焦點單元格所在行的行號
gridview1.FocusedRowHandle

//焦點單元格的值
gridview1.FocusedValue

//指定單元格顯示的字符串值
gridview1.GetRowCellDisplayText(int rowHandler,string feildName)

//指定單元格的值
gridview1.GetRowCellValue(int rowHandler,string feildName)

//設置焦點單元格所在行指定列的值
gridview1.SetFocusedRowCellValue(GridColumn col,object value)

//設置焦點單元格的值
gridview1.SetFocusedValue(object value)

//設置指定單元格的值
//有了這個函數,就可以手工創建行了。
gridview1.SetRowCellValue(int rowHandler,string feildName,object value)
gridview1.SetRowCellValue(int rowHandler,GridColumn col,object value)

//添加新行的方法

gv1.AddNewRow();
foreach (GridColumn col in gv1.Columns)
{
  //用RowCount-1的辦法是不行的
  //gv1.SetRowCellValue(gv1.RowCount-1, col, "aaaaa");
  gv1.SetRowCellValue(gv1.FocusedRowHandle, col, "aaaaa");
}

gv1.UpdateCurrentRow();

//根據綁定的數據源自動產生列

gv1.PopulateColumns();

//為列添加下拉列表(加其他類型如日期、UpDown同理)
RepositoryItemLookUpEdit ri = new RepositoryItemLookUpEdit();
//ri.PopupWidth = 200;
ri.DisplayMember = "sc_prna";
ri.ValueMember = "sc_prno";
DataTable dt1 = DbHelperSQL.QueryT("select sc_prno,sc_prna from mespb04h");
ri.DataSource = dt1;
gv1.Columns["sc_prno"].ColumnEdit = ri;

 

零零散散的先總結一下吧

1.TextEditor(barEditItem)取文本

string editValue = barEditItem1.EditValue.ToString();    //錯誤,返回null

 

string editValue = ((DevExpress.XtraEditors.TextEdit)barEditItem).EditValue.ToString();    //正確,返回文本框內容

2.ComboBoxEdit(barEditItem)添加Item

string item = "comboboxItem1";

((DevExpress.XtraEditors.Repository.RepositoryItemComboBox)this.barEditItem.Edit).Items.Add(item);

3.ComboBoxEdit(barEditItem)取文本

string itemValue = this.barEditItem.EditValue.ToString();

4.Ribbon控件

//添加Page

DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage = new RibbonPage();

ribbonControl.Pages.Add(ribbonPage);

//添加Group

DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup = new RibbonPageGroup();

ribbonPage.Groups.Add(ribbonPageGroup);

//添加Button

DevExpress.XtraBars.BarButtonItem barButtonItem = new BarButtonItem();

ribbonPageGroup.ItemLinks.Add(barButtonItem);

//添加barSubItem

DevExpress.XtraBars.BarSubItem barSubItem = new BarSubItem();

ribbonPageGroup.ItemLinks.Add(barSubItem);

//barSubItem下添加Button

barSubItem.AddItem(barButtonItem);

 

 

//奇怪的刪除Page問題

while (this.ribbonControl.Pages.Count > 0)

{

     ribbonControl.Pages.Remove(ribbonControl.Pages[0]);    //調試正常,運行報異常

}

while (this.ribbonControl.Pages.Count > 0)

{

     ribbonControl.SelectedPage = ribbonControl.Pages[0];

     ribbonControl.Pages.Remove(ribbonControl.SelectedPage); //運行正常

}

//禁止F10鍵Tips

ribbonControl.Manager.UseF10KeyForMenu = false;

//DX按鈕

ApplicationIcon屬性改變圖標

右鍵 Add ApplicationMenu 添加evExpress.XtraBars.Ribbon.ApplicationMenu

5.HitInfo

//在Tab頁上點擊右鍵的事件響應

void xtraTabbedMdiManager_Event(object sender, MouseEventArgs e)

{

     if (e.Button == MouseButtons.Right && ActiveMdiChild != null)

     {

          DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hInfo = xtraTabbedMdiManager.CalcHitInfo(e.Location);

          //右鍵點擊位置:在Page上且不在關閉按鈕內

          if (hInfo.IsValid && hInfo.Page != null && !hInfo.InPageCloseButton)

          {

               this.popupMenu.ShowPopup(Control.MousePosition);//在鼠標位置彈出,而不是e.Location

          }

     }

}

//在ribbon上點擊右鍵的事件響應

private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)

{

    //禁掉原系統右鍵菜單

    e.ShowCustomizationMenu = false;

    //右鍵位置:在barButtonItem上

    if (e.HitInfo != null 

     && e.HitInfo.InItem

     && e.HitInfo.Item.Item is BarButtonItem)

    {

         this.popupMenu.ShowPopup(Control.MousePosition);

    }

    //右鍵位置:在barSubItem中的barButtonItem上

    else if (e.Link != null 

          && e.Link.Item != null 

          && e.Link.Item is BarButtonItem)

    {

         this.popupMenu.ShowPopup(Control.MousePosition);

    }

}

6.皮膚

//添加皮膚程序集后注冊皮膚

DevExpress.UserSkins.OfficeSkins.Register();

DevExpress.UserSkins.BonusSkins.Register();

//設置皮膚

DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Liquid Sky");    //若皮膚名稱錯誤則按系統默認設置(第一個皮膚)

//GalleryFilterMenuPopup事件設置彈出篩選菜單的“All Groups”為中文

private void rgbiSkins_GalleryFilterMenuPopup(object sender, GalleryFilterMenuEventArgs e)

{

    e.FilterMenu.ItemLinks[n].Caption = "所有皮膚";    //n=分組數+1

}

//GalleryInitDropDownGallery事件設置彈出皮膚列表的表頭“ALL Groups”為中文

private void rgbiSkins_GalleryInitDropDownGallery(object sender, InplaceGalleryEventArgs e)

{

    e.PopupGallery.FilterCaption = "所有皮膚";

}

7.dockManager

將視圖的狀態信息保存到xml文件

dockManager1.SaveLayoutToXml("..\\UserConfig\\ViewInfo.xml");

導出xml中保存的狀態信息

dockManager1.RestoreLayoutFromXml("..\\UserConfig\\ViewInfo.xml");

8.barManager

設置bar的字體與系統字體

barAndDockingController1.AppearancesBar.ItemsFont = new Font(this.Font.FontFamily, currentFontSize);

9.設置系統字體

DevExpress.Utils.AppearanceObject.DefaultFont = new Font(this.Font.FontFamily, currentFontSize);

10.treeView

為tree節點加右鍵菜單並選中該節點

        private void treeList1_MouseDown(object sender, MouseEventArgs e)

        {

            if (e.Button == MouseButtons.Right)

            {

                DevExpress.XtraTreeList.TreeListHitInfo hi = treeList1.CalcHitInfo(e.Location);

                if (hi.Node != null && hi.Node.ImageIndex == 5) //葉子節點的ImageIndex == 5

                {

                    TreeListNode node = treeList1.FindNodeByID(hi.Node.Id);

                    treeList1.FocusedNode = node;

 

                    this.popupMenu1.ShowPopup(MousePosition);

                }

            }

        }

 ---------------------------------------------------------------------------------------------------------------------------------------------------------

 

DevExpress使用心得

Developer Express(以下簡稱dev) 這個第三方控件是VS2005自帶的datagridview控件的重寫版本.對於一些grid外觀,模板列的設置有非常簡單的方法.而且控制起來基本和datagridview一樣.所以還是比較方便的.把dev控件拖到窗體以后,會發現多了兩個控件gridcontrol1,gridview1,下面針對這期間使用dev的一些總結寫在下面(主要是連接數據庫,綁定字段和模板列的設置):

1. 設置數據源:

string sql = "select fid,fname from dual";

DataTable dt = DALUse.Query(sql).Tables[0];

gridControl1.DataSource = dt;

*:Daluse是項目數據庫連接基類,不用特別理會

2.綁定字段:

這部分工作主要是在Designer中進行的,dev的Designer設計器提供了非常方便的設置方式.我么可以省去敲代碼,直接在設計器中就可以完成了.在左邊選Columns,添加完列以后,在列的FieleName屬性添加你要綁定列的字段名(ps:比如我的連接SQL語句是:select fid,fname from dual.我想要把fid綁定到列1.那就在列1的FieldName屬性寫FID就可以了   ),這里有非常重要的一點,對於Oracle數據庫,所有的在設計器里寫的程序中的字段名必須大寫,否則可能綁定不上字段,sqlserver沒有這個限制.通過代碼其實也可以實現,具體代碼如下:

gridView1.Columns[0].FieldName = "FID";

 

*:gridcontrol只用在設置數據源,以后的操作大多都有gridview這個控件了.他們是一體的,可以在頁面的設計代碼中找到將他們關聯的一句話,這是系統自動寫的:gridcontrol1.mainview=this.gridview1.

 

2. 模板列的設置:

模板列可以很輕松的讓用戶實現在表格中進行查找編輯.

同樣,這部分工作在dev的Designer中進行.在左邊選In-Place Editor Repository,上面的ADD提供了比較豐富的模板列類型,從中選取一個就可以了.模板列建好以后就要和我們當前有的數據列進行綁定了.返回到Columns中,假如列1是我們想設定的,在他的屬性中找到ColumnEdit.選擇我們加進去的模板列就可以了.對於模板列我們最常用的還是LookUpEdit.

這里簡單說下他的設置和用法:

 

LookUpEdit是彈出的一個小的grid,從它里面我們可以實現自動篩選里面的信息.

首先從In-Place Editor Repository中添加LookUpEdit.取名為Re1.然后.在他的Columns屬性中添加3列.Caption依次為:編號,姓名,性別.FieldName依次為:FID,FNAME,FSEX.然后將Re1的NullText設置成空.

AutoSearchColumnIndex屬性設置為2.ImmediatePopup屬性設置為True.

SearchMode設置為OnlyInPopup.

然后將這個模板列附加到我們上面提到的列1(也就是將列1的ColumnEdit屬性設成Re1)

最后我們還要在代碼里面給Re1綁定數據源和顯示項.

 

Re1.DataSource = DALUse.Query("select fid,fname,fsex from dual").Tables[0];

Re1.DisplayMember = "FSEX";

Re1.ValueMember = "FNAME";

*:對於Oracle數據庫字段一定要用大寫,切記!!

 

至此,我們的LookUpEdit模板列就設置完成了,它現在已經實現了通過性別列檢索,然后將姓名列附到我們的列1上.

對於LookUpEdit可以實現過濾主要是AutoSearchColumnIndex和SearchMode屬性.可以參見幫助知道它們的用法: ms-help://DevExpress.NETv7.2/DevExpress.XtraEditors/DevExpressXtraEditorsControlsSearchModeEnumtopic.htm

 

 

Ps:

//去掉上面的篩選條

gridView1.OptionsView.ShowGroupPanel = false;

 

//設某一列只讀或者不可編輯

gridView1.Columns[0].OptionsColumn.AllowEdit = false;

gridView1.Columns[0].OptionsColumn.ReadOnly = false;

 

//設某一列文字和標題局中顯示                  gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

                   gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

 

//去掉某一列上面的自動篩選功能(Filter)                   gridView1.Columns[0].OptionsFilter.AllowAutoFilter = false;

gridView1.Columns[0].OptionsFilter.AllowFilter = false;                gridView1.Columns[0].OptionsFilter.ImmediateUpdateAutoFilter = false;

 

//設置凍結列(左凍結)

gridView1.Columns[0].Fixed= DevExpress.XtraGrid.Columns.FixedStyle.Left;

 

//得到單元格數據(0行0列)

string ss=gridView1.GetRowCellDisplayText(0, gridView1.Columns[0]);

string ss = gridView1.GetRowCellValue(0, gridView1.Columns[0]);

 

//設置單元格數據(將0行0列的單元格賦值123)

gridView1.SetRowCellValue(0, gridView1.Columns[0], "123");

 

//手動添加dev的列

DevExpress.XtraGrid.Columns.GridColumn Col1=new DevExpress.XtraGrid.Columns.GridColumn ();

Col1.FieldName="FID";

Col1.Visible=true;

Col1.VisibleIndex=gridView1.Columns.Count;

gridView1.Columns.Add(Col1);

//設置自動增加的行號,需要先添加給gridview添加事件CustomDrawRowIndicator

        private void gridview_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)

        {

            if (e.Info.IsRowIndicator && e.RowHandle >= 0)

                e.Info.DisplayText = (e.RowHandle + 1).ToString();

        }

 

 

//添加datatable數據行,數據列

                    DataTable dt = new DataTable();

                    dt.Columns.Add("Col1");

                    DataRow dr = dt.NewRow();

                    dr[0] = "123";

                    dt.Rows.Add(dr);

 

*以上這些都可以在Designer中進行設置,而不用去敲代碼

                                           

 

對於第三方控件的整體修改和保存,具體說明如下:

1.     刪除: (修改了dgvdel里的datagridviewdel方法)

public static void datagridviewdel_Dev(DevExpress.XtraGrid.Views.Grid.GridView Mydgv)

        {

            if (MessageBox.Show("你確定要刪除選中的記錄嗎?", "刪除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)

            {

                int iSelectRowCount = Mydgv.SelectedRowsCount;

              

                if (iSelectRowCount > 0)

                {

                    Mydgv.DeleteSelectedRows();

              

                }

  

            }

        }

 

2. 新增: (對於新增,其本身的AddNewRow方法就可以做到)

 

private void btn_add_Click(object sender, EventArgs e)

        {

gridView1.AddNewRow();   

}

具體如果對於新加行還有什么特別的設置,可以在它gridView1_InitNewRow事件中填寫:

private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)

        {

            ColumnView View = sender as ColumnView;

            View.SetRowCellValue(e.RowHandle, View.Columns[0], gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[0])); //復制最后一行的數據到新行

            View.SetRowCellValue(e.RowHandle, View.Columns[1], gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[1])); //復制最后一行的數據到新行

        }

 

3.     保存 (第三方控件提供的RefreshData和RefreshDataSource方法對於保存數據都不好使,最后還是使用了Dgvsave的datagridviewsave方法,用這個方法就可以)

 

 

 

注:代碼中出現多gridView1全為第三方控件的gridView.

 

示例:

去掉上面的”Drag a column header here to group by that column”

我們拖動一個gridcontrol控件后,在出現上會出現一下效果:

 

他默認的好多地方都是用英文表示出來的,所以我們得用一些相關的屬性設置來達到我們實際想要達到的效果.首先就是要去掉上面的一個英文條”Drag a column header here to group by that column”.我們可以通過手工設置和代碼編寫來實現,以后針對第三方控件的屬性都可以用這兩種方法來實現.手工設置:點擊左下角的”Run Designer”按鈕.


這樣我們就進入了Dev的設計器(所有的對於控件的控制都可以在這里設置).然后點擊左邊的Main選項卡中的Views項.有邊欄目里會出現N多屬性,我們找到OptionViews,展開它,然后將里面的ShowGroupPanel屬性設成false就OK了.代碼編寫:

我們可以直接在構造函數或者頁面的打開事件中寫入代碼:

gridView1.OptionsView.ShowGroupPanel = false;

兩種方法可以達到同樣的效果.

設置外觀

接下來我們來設置它的外觀.Dev給我們提供了很多外觀的模板,這樣使得我們不用在通過復雜的代碼來設置他的外觀,我們直接用手工設置就可以完成了!點擊Dev設計器中左邊的Appearance選項卡的Style Schemes項:


通過在里面設置外觀,然后點擊右小角的Apply按鈕就可以很輕松的設置各種各樣的外觀了.

去掉控件默認的Filter功能出現英文的情況

我們按照上面所講的方法給Dev添加列后,在點擊列頭的小按鈕的時候會出現這樣的效果(出現了我們不想看到的英文):


這個對於我們來說是比較討厭的.我們可以在Dev的設計器中消滅它.點擊設計器中左邊的Main選項卡的Columns項.選擇你想設置的列,然后點擊右上角他們的選項卡:


選擇Filter options選項卡,然后將里面的AllowAutoFilter,AllowFilter,ImmediateUpdateAutoFilter屬性分別設成false就可以了.這樣這列的AutoFilter功能就去掉了(僅限於這列)!如果你夠細心的話,你會發現上面的選項卡Column options里面的屬性也都是特別使用的:


這里面的屬性不用說,我想你也知道怎么用了(他也是只針對一列設置的).

關閉右鍵點擊列頭會出現英文的情況:

在Dev的設計器中選擇左邊Main選項卡中的Views項.找到OptionsMenu,然后展開,將里面的EnableColumnMenu設成false就可以了.

=======================================================================================================

 

DevExpress控件的GridControl控件小結


(由於開始使用DevExpress控件了,所以要點滴的記錄一下)

 

1.DevExpress控件組中的GridControl控件不能使橫向滾動條有效。現象:控件中的好多列都擠在一起,列寬都變的很小,根本無法正常瀏覽控件單元格中的內容。

解決:

gridView1.OptionsView.ColumnAutoWidth屬性是true,即各列的寬度自動調整,你把它設成false,就會出現了。

 

2.使單元格不可編輯。

gridcontrol -->gridview -->OptionsBehavior -->Editable=false

 

3.沒有下拉滾動條事件怎么辦?現象:因為需要加載大數據量數據,所以不能一次把所有數據讀入datatable進行綁定,所以決定在用戶進一步瀏覽數據時進行數據的實時加載工作,就是每當用戶拉動滾動條時,多加載一些數據進入datatable.沒有找到合適的滾動條事件,於是用這個事件代替了,非常合適我的需求.

TopRowChanged事件.

4.獲取選定行,指定列單元格的內容

        private string GetSelectOID()
        {
            int[] pRows = this.gridView1.GetSelectedRows();
            if (pRows.GetLength(0) > 0)
                return gridView1.GetRowCellValue(pRows[0], mOIDFiledName).ToString ();
            else
                return null;
        }

//mOIDFiledName為要獲取列的列名

5.去除"Drag a Column Header Here To Group by that Column"

屬性Gridview->Option View->Show Group Panel=false,就好了

6.在gridcontrol中添加checkbox復選框

gridview->run designer->columns->選擇要變成復選框的那一列->column edit->new(在這里可以選擇很多類型)

加載checkbox數據時,費了一點時間,checkbox的復選框怎么點擊,一失去焦點是,選擇的操作就無效了,問題就出在datatable的綁定上了,一定要綁定一個布爾的類型.

代碼是這樣滴!

private void FrmCreateLegend_Load(object sender, EventArgs e)
{
    IFeatureLayer pFeatureLayer;
    IDataset pDataset;
    string pName;
    DataTable pDatatable = new DataTable();
    pDatatable.Columns.Add("圖層名稱", System.Type.GetType("System.String"));
    pDatatable.Columns.Add("選擇", System.Type.GetType("System.Boolean"));
    DataRow pDataRow;
    object[] rowArray = new object[2];
    for (int i = 0; i < mFeatureLayers.Count; i++)
    {
        pDataRow = pDatatable.NewRow();
        pFeatureLayer = mFeatureLayers[i] as IFeatureLayer;
        rowArray[0] = pFeatureLayer.Name;
        rowArray[1] = false;
        pDataRow.ItemArray = rowArray;
        pDatatable.Rows.Add(pDataRow);
    }

    this.gridMark.DataSource = pDatatable;
    this.gridMark.Refresh();
}
注意:創建的datatable的列名一定要和gridview中的列的fieldname屬性值是一個名字,不然,你會發現添加了和你綁定的datatalbe一樣多的行,可是行里面卻沒有內容的.

7.多選

GridControl->GridView->屬性->OptinosSelecttion->MultiSelect

 8.不顯示子表信息

當我們對DataTable建立父子關系后,將父表綁定在Grid上,會造成關系列上有加號顯示,並且可以展開.如果你覺得展開的信息對你沒有意義的話,是可以關掉的.這是需要修改屬性

屬性Gridview->Option View->ShowDetailButtons=false

                                  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM