找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman

社区贡献组

270

主题

1万

帖子

1万

积分

社区贡献组

积分
19311

活字格认证微信认证勋章元老葡萄

iceman
社区贡献组   /  发表于:2012-4-15 15:02  /   查看:6492  /  回复:0
拖拽 Excel 到 C1FlexGrid

当我们加载 Excel 文件到 Windows 窗体应用程序时,最常见的方法是使用 Streams 去读/写 文件。另一种更好的方法是直接拖拽 Excel 文件到
FlexGrid 上。

这个例子使用 Drag 和 Drop 特性来实现该应用。下面我们分部阐述如何实现:

1.创建用户自定义控件

在用户自定义控件中添加 C1FlexGrid,我们使用 C1Command's MainMenu 和 DockingTab 控件去模拟 Excel 菜单和 Sheets
Tab。使用 Label 和 TextBox 去展示当前选中索引和内容。
UI 布局如截图:




2.拖拽 Excel 到 C1FlexGrid

是指 C1FlexGrid.DropMode 为 Manual。添加 C1FlexGrid DragEnter 和 DragDrop 事件。在 DragEnter 事件中更改 光标形状。我们我需要创建
“file” 变量去存储添加的文件名称。
  1. string file;
  2.          private void _flex_DragEnter(object sender, DragEventArgs e)
  3.          {
  4.             if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
  5.                 e.Effect = DragDropEffects.Move;
  6.             else
  7.                 e.Effect = DragDropEffects.None;
  8.          }
复制代码
3.现在我们需要在 DragDrop 事件中操作拖拽到 C1FlexGrid 中的 Excel 文件。Drop 事件可以捕捉到文件名和路径。这时我们可以使用 C1FlexGrid
.LoadExcel 方法去加载 Excel 文件。但是我们需要去检查拖拽的文件是否为 BIFF8(.XlS) 或者 OpenXML(xlsx)文件。
  1. private void _flex_DragDrop(object sender, DragEventArgs e)
  2.         {
  3.             file = string.Empty;

  4.             string[] str = (string[])e.Data.GetData(DataFormats.FileDrop);

  5.             foreach (string s in str)
  6.                 file += s;
  7.             LoadExcelInFlex();
  8.         }
  9.                 private void LoadExcelInFlex()
  10.         {
  11.             if ((file.EndsWith(".xls")) || (file.EndsWith(".xlsx")))
  12.             {
  13.                 _flex.DataSource = null;
  14.                 _flex.LoadExcel(file);
  15.                 AddTabs();
  16.                 UpdateFields();
  17.             }
  18.             else
  19.             {
  20.                 MessageBox.Show("Please select an Excel file");
  21.             }
  22.         }
复制代码
LoadExcelInFiel 方法使用两个方法:AddTabs() 和 UpdateFields() 。这两个方法的作用是创建类似于 Excel 的 SpreadSheet 界面。
  1. private void AddTabs()
  2.         {
  3.             _sheetTabs.TabPages.Clear();
  4.             string[] sheetnames = _flex.LoadExcelSheetNames(file);
  5.             foreach (string str in sheetnames)
  6.             {
  7.                 C1DockingTabPage dtpage = new C1DockingTabPage();
  8.                 dtpage.Name = str;
  9.                 dtpage.Text = str;
  10.                 _sheetTabs.TabPages.Add(dtpage);
  11.             }
  12.             _sheetTabs.SelectedIndex = 0;
  13.         }

  14.         //Method to update the fields in the UI
  15.         private void UpdateFields()
  16.         {
  17.             SetRowColNames();
  18.             int selcol = _flex.Col;
  19.             int selrow = _flex.Row;
  20.             label1.Text = _flex.GetDataDisplay(0, selcol) + selrow.ToString();

  21.             try { textBox1.Text = _flex.GetDataDisplay(selrow, selcol); }
  22.             catch(Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message);}
  23.            
  24.         }
复制代码



更多请参考 Demo

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册
返回顶部