赞
踩
它的绑定数据的方式和TreeList很类似。新建Winfrom->拖拽一个DataControl控件到窗体里,点击Run Designer->弹出窗口里选中Columns,在这里面增加列,注意如果不设置Visible=false,这里面设置的列都是将会显示的列。
创建Columns和Rows并绑定数据
DataTable dt = new DataTable(); dt.Columns.Add("index"); dt.Columns.Add("uidItem"); dt.Columns.Add("uidItemRevision"); dt.Columns.Add("primaryTag"); dt.Columns.Add("natureOfItem"); dt.Columns.Add("itemId"); for (int i = 0; i < 100; i++) { DataRow dataRow = dt.NewRow(); dataRow["index"] = "" + i; dataRow["uidItem"] = "" + i; dataRow["uidItemRevision"] = "" + i; dataRow["primaryTag"] = "" + i; dataRow["natureOfItem"] = "" + i; dataRow["itemId"] = "" + i; dt.Rows.Add(dataRow); } this.gridControl1.DataSource = null; this.gridControl1.DataSource = dt;
注意我们在Run Desinger里编辑的列是展示用的,而代码里dt.Columns.Add(“index”);添加的列属性,不是用于显示用的,只有列的字段和Run Desinger里列的FieldName匹配时才显示。
dt.Columns.Add("index");
dataRow["index"] = "" + i;
这2个组成的是行列数据,注意是数据,用于绑定用的。
如果我们不在Run Desinger里手动添加列,想根据行列数据动态创建列的显示,只要设置好DataSource后,执行this.gridView1.PopulateColumns();语句即可。
有如下三种方式
//获得选中的行,如果是单选模式,则直接取第一个
int selectRow = gridView1.GetSelectedRows()[0];
//指定行和列属性名取单元格数据
string name = this.gridView1.GetRowCellValue(selectRow, "uidItem").ToString();
//获得选中的行,如果是单选模式,则直接取第一个
int selectRow = gridView1.GetSelectedRows()[0];
//获得绑定的行数据
DataRow dataRow = gridView1.GetDataRow(selectRow);
//从绑定的行数据直接取数据
string uidItem = (string)dataRow["uidItem"];
string uidItemRevision = (string)dataRow["uidItemRevision"];
获得选中单元格值,不是行值。
//获得选中单元格值
var obj = gridView1.FocusedValue;
选中gridController下的gridView,(gridController和gridView都是可选中的),选中后在属性面板下可看到gridView的属性和事件。
事件FocusedRowChanged和FocusedRowObjectChanged都会在gridView被选中时触发,任选其一即可。比如FocusedRowObjectChanged的事件监听函数如下:
private void Gridview1_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e)
{
//获得选中的行,如果是单选模式,则直接取第一个
int selectRow = gridView1.GetSelectedRows()[0];
//获得绑定的行数据
DataRow dataRow = gridView1.GetDataRow(selectRow);
//从绑定的行数据直接取数据
string uidItem = (string)dataRow["uidItem"];
string uidItemRevision = (string)dataRow["uidItemRevision"];
}
注意,有些人说SelectionChanged事件可以选中触发,我试了不可以。不知道是不是因为我将选中设为选中整个行的问题(this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;)
this.btnOk.TabIndex = 1;
参考DevExpress GridControl使用方法总结
如何隐藏GridControl的GroupPanel表头:设置Run Design->OptionsView->ShowGroupPanel 设置为:false
如何解决单击记录整行选中的问题:View->OptionsBehavior->EditorShowMode 设置为:Click
如何解决GridControl记录能获取而没有显示出来的问题:gridView.populateColumns();//会将所有的绑定数据都显示出来
如何让行只能选择而不能编辑(或编辑某一单元格):
(1)、View->OptionsBehavior->EditorShowMode 设置为:Click
(2)、View->OptionsBehavior->Editable 设置为:false
如何禁用GridControl中单击列弹出右键菜单:设置Run Design->OptionsMenu->EnableColumnMenu 设置为:false
如何隐藏GridControl的GroupPanel表头:设置Run Design->OptionsView->ShowGroupPanel 设置为:false
如何禁用GridControl中列头的过滤器:设置 Run Design->OptionsCustomization->AllowFilter 设置为:false
如何显示水平滚动条:设置this.gridView.OptionsView.ColumnAutoWidth = false;
如何定位到第一条数据/记录:this.gridView.MoveFirst()
如何定位到下一条数据/记录:this.gridView.MoveNext()
如何定位到最后一条数据/记录:this.gridView.MoveLast()
设置成一次选择一行,并且不能被编辑:
this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
this.gridView1.OptionsBehavior.Editable = false;
this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
//默认选中第一行
this.gridView1.OptionsSelection.EnableAppearanceHideSelection = false;
如何显示行号:
this.gridView1.IndicatorWidth = 40;
//显示行的序号
private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle>=0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
如何让各列头禁止移动:gridView1.OptionsCustomization.AllowColumnMoving = false;
如何让各列头禁止排序:gridView1.OptionsCustomization.AllowSort = false;
如何禁止各列头改变列宽:gridView1.OptionsCustomization.AllowColumnResizing = false;
设某一列文字和标题局中显示 :
gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
GridControl控件分页很奇怪,他提供的DataSource就是一页数据,并不是我们常想的那样,把所有数据都提供给DataSource,根据参数配置,设置Step(每页显示多数),实现分页。所以要想实现分页功能就要在DataSouce数据源上下功能。
GridControl自带分页控件。
设置this.gridControl1.useEmbeddedNavigator = true,会显示出分页控件。在控件的属性面板上有个EmbeddedNavigator选项,在这里设置分页控件属性。
先设置Buttons选项,分页控件上有很多Button,有删除,编辑,上一页,首页,下一页,尾页等,有些是不需要的,可以在这里选中某个Button,然后设置为Visible=false。比如
最终显示效果是
设置其它参数:
TextLocation=Center,
TextStringFormat="";//里面内容我们在代码里做。
其它就用默认即可。
选中控件,在属性面板下找到EmbeddedNavigator选项下的ButtonClick,增加事件,如下
总体思路是:根据总页数,每页显示条和当前页数,从allList截取出当前显示出的数据,然后添加到currentPageList集合里,然后再对currentPageList集合构造DataTable,将DataTable给DataSource。在上一页/下一页事件监听器中,根据按钮类型操作pageIndex,之后从前走一遍上面的流程
public class TestVo{ /// <summary> /// /// </summary> public string name{ get; set; } /// <summary> /// /// </summary> public string age{ get; set; } } //所有数据 private List<TestVo> allList = new List<TestVo>(); //页行数 public int pagesize = 10; //当前页 public int pageIndex = 1; //总页数 public int pageCount; //选中的数据 private List<TestVo> currentPageList = new List<TestVo>(); //选中的数据经过处理放到DataTable里 private DataTable dt; /// <summary> /// 初始化树信息 /// </summary> private void LoadData() { dt = new DataTable(); dt.Columns.Add("name"); dt.Columns.Add("age"); calPage(); } /// <summary> /// 计算分页数据 /// </summary> private void calPage() { currentPageList.Add(new TestVo() { name="张三", age="12"}); currentPageList.Add(new TestVo() { name="李四", age="13"}); currentPageList.Add(new TestVo() { name="王五", age="10"}); currentPageList.Add(new TestVo() { name="麻六", age="20"}); int count = allList .Count; pageCount = count / pagesize; if(count % pagesize > 0) { pageCount++; } calCurrentPageList(); } /// <summary> /// 计算每页数据 /// </summary> private void calCurrentPageList() { dt.Clear(); currentPageList.Clear(); //记录获取开始数 int startIndex = (pageIndex - 1) * pagesize; int endIndex = pageIndex * pagesize; if(endIndex > allList .Count) { endIndex = allList .Count; } for (int i = startIndex; i < endIndex; i++) { TestVo testVo = allList [i]; currentPageList.Add(testVo ); } int index = 1; ParseDataTable(dt, currentPageList, ref index); this.gridControl1.DataSource = null; this.gridControl1.DataSource = dt; // this.gridControl1.EmbeddedNavigator.Text = string.Format("第 {0}页 ,共 {1}", pageIndex, pageCount); //在这里设置分页的文字展示 this.gridControl1.EmbeddedNavigator.TextStringFormat = string.Format("第 {0}页 ,共 {1}", pageIndex, pageCount); } /// ///生成行数据 /// private void ParseDataTable(DataTable dt, List<TestVo > list, ref int index) { foreach(TestVo testVo in list) { DataRow dataRow = dt.NewRow(); dataRow["name"] = testVo.name; dataRow["age"] = testVo .age; dt.Rows.Add(dataRow); } } ///button事件 private void gridControl_EmbeddedNavigatorClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e) { if (e.Button.ButtonType == NavigatorButtonType.NextPage) { pageIndex++; } else if (e.Button.ButtonType == NavigatorButtonType.PrevPage) { pageIndex--; } else if (e.Button.ButtonType == NavigatorButtonType.Last) { pageIndex = pageCount; } else if (e.Button.ButtonType == NavigatorButtonType.First) { pageIndex = 1; } calCurrentPageList(); }
DevExpress的GridControl提供方便的数据导出功能,可以方便的导出Exce,PDF,Html页面,world形式,无需写额外的代码,方便、快捷。
private void ExportPdf() { using (SaveFileDialog saveDialog = new SaveFileDialog()) { saveDialog.Filter = "Excel (2003)(.xls)|*.xls|Excel (2010) (.xlsx)|*.xlsx |RichText File (.rtf)|*.rtf |Pdf File (.pdf)|*.pdf |Html File (.html)|*.html"; if (saveDialog.ShowDialog() != DialogResult.Cancel) { string exportFilePath = saveDialog.FileName; string fileExtenstion = new FileInfo(exportFilePath).Extension; switch (fileExtenstion) { case ".xls": gridControl1.ExportToXls(exportFilePath); break; case ".xlsx": gridControl1.ExportToXlsx(exportFilePath); break; case ".rtf": gridControl1.ExportToRtf(exportFilePath); break; case ".pdf": gridControl1.ExportToPdf(exportFilePath); break; case ".html": gridControl1.ExportToHtml(exportFilePath); break; case ".mht": gridControl1.ExportToMht(exportFilePath); break; default: break; } if (File.Exists(exportFilePath)) { try { if (DialogResult.Yes == MessageBox.Show("文件已成功导出,是否打开文件?", "提示", MessageBoxButtons.YesNo)) { System.Diagnostics.Process.Start(exportFilePath); } } catch { String msg = "The file could not be opened." + Environment.NewLine + Environment.NewLine + "Path: " + exportFilePath; MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { String msg = "The file could not be saved." + Environment.NewLine + Environment.NewLine + "Path: " + exportFilePath; MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。