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;
因篇幅问题不能全部显示,请点此查看更多更全内容