C# DevExpress总结-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 = " sc_prno,sc_prna mespb04h";
DbHelperSQL.QueryD(sql,ds,"main");

//子GridView的数据
sql = " pa_name,pa_no,sc_prno 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(" sc_prno,sc_prna mespb04h");
ri.DataSource = dt1;
gv1.Columns["sc_prno"].ColumnEdit = ri;

你可能感兴趣的:(C#)