首页 > 学院 > 开发设计 > 正文

XtraGrid使用心得(折叠式主细档、分组统计)

2019-11-17 02:35:44
字体:
来源:转载
供稿:网友
XtraGrid使用心得(折叠式主细档、分组统计)

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;


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表