ReoGrid是一款免费并且开源的表格控件,兼容Excel。winform和WPF中都可以使用。
在winform中使用该控件时,首先需要下载dll,在工具--NuGet包管理器--管理解决方案的NuGet程序包中,找到unvell.ReoGrid.dll进行下载(WPF版下载unvell.ReoGridWPF.dll)。
下载完成之后,在工具箱中选择一个选项卡(例如报表)右键点击选择项,在弹出的窗体中点击.NET Framework组件,浏览,选择刚才下载的unvell.ReoGrid.dll,勾选上ReoGridControl点击确定,工具箱中就有ReoGridControl控件,拖动即可使用。
在使用控件时,首先需要设置一下鼠标样式,该控件默认的鼠标样式与其他控件不一样,需要在Designer.cs文件中手动修改。
this.rightReoGrid.CellsSelectionCursor = System.Windows.Forms.Cursors.Default;
可以直接使用该控件进行表格展示,也可以根据业务需求进行重绘表格,这里主要记录重绘表格的方法。ReoGrid控件的说明文档:https://reogrid.net/document/
//ReoGrid初始化 rightReoGrid.Reset();//隐藏横向、纵向滚动条 rightReoGrid.SetSettings(unvell.ReoGrid.WorkbookSettings.View_ShowScrolls, false); //隐藏横向滚动条 //rightReoGrid.SetSettings(unvell.ReoGrid.WorkbookSettings.View_ShowHorScroll, false); //隐藏纵向滚动条 //rightReoGrid.SetSettings(unvell.ReoGrid.WorkbookSettings.View_ShowVerScroll, false); //隐藏行头(A,B,C...)和列头(1,2,3...) rightReoGrid.CurrentWorksheet.SetSettings(unvell.ReoGrid.WorksheetSettings.View_ShowHeaders, false);
Reset():Reset control and workbook (remove all worksheets and put one new) 重新设置控件,移除全部的工作页重新设置一个新的空白页
效果如下图:
按照上述代码中设置,表格变为了下图:
看起来很low,也没有标题,接下来进行表格的重绘
首先设置一下当前显示区域要展示的行和列,行数和列数根据各自的需求以及控件大小定,这里只是Demo示范
//设置控件当前工作页总的行数 var rightReoGridRowNum = 5; //设置控件工作页总的列数 var rightReoGridColNum = 3; //获取控件当前工作页 var rightWorkSheet = rightReoGrid.CurrentWorksheet; rightWorkSheet.Resize(rightReoGridRowNum, rightReoGridColNum);
Resize(int row, int col):参数中row是要设置的行数,col是要设置的列数
接下来设置列的宽度和行的高度
//设定Name列列宽:50 rightWorkSheet.SetColumnsWidth(0, 1, 50); //设定Address列列宽:30 rightWorkSheet.SetColumnsWidth(1, 2, 30); //设定行高:16 rightWorkSheet.SetRowsHeight(0, rightReoGridRowNum, 16);
这里可以看做将整个表格分为了两大部分,Name列列宽为50,只有第0列这1列;Address列列宽为30,有第1和第2这2列。
设置所有行的行高为16。
SetColumnsWidth(int col, int count, ushort width):从第col列开始(下标从0开始,下标为col的列),count个列的列宽设置为width
SetRowsHeight(int row, int count, ushort height):从第row行开始(下标从0开始,下标为row的行),count个行的行高设置为height
接下来设置标题
//设置标题行 rightWorkSheet[0, 0] = "Name"; rightWorkSheet[0, 1] = "Address1"; rightWorkSheet[0, 2] = "Address2";
表格中的数据如果有初始化需要展示的,可以进行填充
//填充Name列 for (int i = 1; i < rightReoGridRowNum; i++) { rightWorkSheet[i, 0] = "Hello" + i.ToString(); }
今天先记录到这里,这些就是ReoGrid控件的简单重绘,ReoGrid控件将鼠标点击拖动事件重写了,也就是不可以使用KeyDown和KeyUp事件来实现单元格的交换位置,目前我是使用了Ctrl+鼠标左键的点击事件来实现,下次进行记录分享。