dev Gridcontrol控制元件屬性部分

守望陽光01發表於2017-08-19

XtraGrid的關鍵類就是:GridControl和GridView。GridControl本身不顯示資料,資料都是顯示在GridView/CardView/XXXXView中。GridControl是各種View的容器。所以要控制顯示,要從GridView這些類入手。關於GridControl與GridView的關係,我不說了。下面給出一段程式碼。實際使用中常用到。

        public Form2()
        {
            InitializeComponent();

            //不顯示內建的導航條。
            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;

            
        }

 

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            //設定連線字串
            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"];
        }

 

  上面的程式碼是顯示一個主從表。顯示主從表有些技巧。文件中還沒有說出來,俺摸索了一個晚上才搞出來。像上面看到的,事實上很簡單。

  上面DbHelperSQL是我從CodeMatic 2.0中搞出來的,我自己修改了一下。

  上面程式碼的效果圖如下:

  XtraGrid使用心得一 - 伯平 - 滌心齋   XtraGrid使用心得一 - 伯平 - 滌心齋

  對於GridView,我有兩大疑問:

  一、顯示主從表,這個解決了。

  二、分組顯示,這是報表中經常要用到的,GridView的解決方案很簡捷,只需將相應列的GroupIndex屬性設一下就成了。 ================================================================================================ 為XtraGrid的GridView加行號。示例程式碼如下:        //設定行指示器的寬度(行指示器就是最左邊那列什麼都不顯示的列)
       //預設情況下,如果要在裡面顯示行號的話,寬度會不足,數字顯示不清晰
       //所以要改一下寬度
       gv1.IndicatorWidth = 20;
       private void gv1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim();
            }
        }
  效果圖如下:
  

  常用程式碼:
//新增分組統計欄位
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;

相關文章