赞
踩
它的绑定数据的方式和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 版权所有,并保留所有权利。