DevPress GridControl的使用

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中搞出來的,我自己修改了一下。

  上面代碼的效果圖如下:

  

  

  對於GridView,我有兩大疑問:

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

  二、分組顯示,這是報表中經常要用到的,GridView的解決方案很簡捷,只需將相應列的GroupIndex屬性設一下就成了:

在gridcontrol上擊右鍵,選run designer進入設計模式。在columns欄內點retrieve fields將數據源中所有字段導入進來。

 點需要分組的字段,在其屬性欄的groupindex依次設爲0,1..,在不需要分組的字段上保持-1不變。

 進入feature browse/summary /group sammary /summary items中增加要分組進行統計的字段。這裏要設其fieldname字段名,showingroupcolumnfooter 顯示在哪一欄位,sammarytype顯示分組後統計的字段是進行sum(求和,求平均,最大值,最小值等)

 在grouping /behavior /grneral /可設兩個屬性
autoexpandallgroups 設爲true時將所有分組展開,反之摺疊。
 showgroupedcolumns是否在網格是顯示你分組依據的哪些字段,false爲不顯示

同樣在feature browse/summary /total sammary 這些不是針對分組,而是針對所有行。在summaryitem中對要處理的列進行設置,主要設置需要處理列的column,summarytype.


當然設好後要將optionview的showfooter屬性設爲true,表格底部會出現一summary行。

  補:另有三個屬性需要用,我們查詢的結果一般是隻讀的,並且對每一個單元格最好無焦點,故可同時選所有字段,設allowedit爲false;allowfocus爲false;readonly爲true;

 

爲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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章