2012-10-29 11:44

DevExpress GridControl 使用详解


public partial class FrmMain : Form
{
  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"];
  }
}
 
 
为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;

添加新评论