1 // 单元格编辑结束,焦点离开或者按回车键时 比如:你要判断当前单元格输入内容是否合法。
private void fpSpread1_EditModeOff(object sender, System.EventArgs e) 

2 // 单元格得到焦点时触发 
private void fpSpread1_EnterCell(object sender, FarPoint.Win.Spread.EnterCellEventArgs e) 
// 编辑单元格时触发,单元格内容发生改变
3 private void fpSpread1_EditChange(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)  4 // 编辑模式开始时触发
private void fpSpread1_EditModeOn(object sender, System.EventArgs e)  5 // 单元格失去焦点时触发
private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)  6 // 双击Spread时触发 一般用来付值,比如把选中行内容传给其他控件
private void fpSpread1_CellDoubleClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)  7 // 单击Spread时触发 一般用来改变选中行的颜色
private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)  8 // 一般用来检测输入内容是否合法,比如检测输入的内容是否是数字 
private void fpSpread1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)  9 // 用来捕捉按钮列等属于按钮范畴的事件
private void spdSetList_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e  --------------------------------------------------------------------
Spread基本知识(一)
--------------------------------------------------------------------
1 取得当前行号、列号。int row=e.Row; 
int count=e.Count;
或者:
int rowindex = fpSpread1.ActiveSheet.ActiveRowIndex;
int columnindex = fpSpread1.ActiveSheet.ActiveColumnIndex; 2 单击一行变颜色。 
private void spdResult_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
//单击Spread列头时,什么也不处理 if(!e.ColumnHeader)
{
if(spdResult.Sheets[0].Rows.Count!=0)
{
for(int i=0;i<spdResult.Sheets[0].Rows.Count;i++)
{
spdResult.Sheets[0].Rows[i].BackColor=System.Drawing.Color.White;
}
int row=e.Row;
spdResult.Sheets[0].Rows[row].BackColor=System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(255)), ((System.Byte)(255)));
}
}
} 3 将Spread的单元格内容付值给一控件的Text
txtItemCD.Text = spdResult.Sheets[0].Cells[row,count].Text; 4 给Spread的指定单元格付值。
spdResult.Sheets[0].Cells[row,count].Text = txtItemCD.Text; 5 通过上下光标键改变选中行颜色
private void spdResult_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
{
//首先检查spread行数是否为0
if(spdResult.Sheets[0].Rows.Count==0)
{
return;
}
else
{
for(int i=0;i<spdResult.Sheets[0].Rows.Count;i++)
{
spdResult.Sheets[0].Rows[i].BackColor=System.Drawing.Color.White;

int row=e.NewRow;
spdResult.Sheets[0].Rows[row].BackColor=System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(255)), ((System.Byte)(255))); 
}
} 6 下拉列表加载数据(ComBobox) 
列表追加(适合于数据量少的情况)
FarPoint.Win.Spread.CellType.ComboBoxCellType cb4 = newFarPoint.Win.Spread.CellType.ComboBoxCellType();
cb4.ListWidth = 96;
cb4.Editable = true;
cb4.MaxDrop = 10;
cb4.MaxLength = 1;
string[] priceTagList = new string[]{" 0 无"," 1 有"};
cb4.Items = priceTagList;
this.spdSetList.ActiveSheet.Columns[4].CellType = cb4; 从数据库追加
FarPoint.Win.Spread.CellType.ComboBoxCellType cb12 = newFarPoint.Win.Spread.CellType.ComboBoxCellType();
cb12.ListWidth = 150;
cb12.Editable = true;
cb12.MaxDrop = 10;
cb12.MaxLength = 8; //dsEmployee:数据集Dataset,已经加载好数据的Dataset
string[] employeeList = DataSetToArray(dsEmployee, 8);
cb12.Items = employeeList;
this.spdSetList.ActiveSheet.Columns[12].CellType = cb12; private string[] DataSetToArray(DataSet ds, int BlankNum)
{
int i = 0;
int NumLength = 0;
string[] returnArray = new string[ds.Tables[0].Rows.Count]; DataRow foundRows = ds.Tables[0].Rows[ds.Tables[0].Rows.Count -1];
NumLength = foundRows[0].ToString().Length; foreach(DataRow dr in ds.Tables[0].Rows)
{
returnArray[i] = dr[0].ToString().PadLeft(BlankNum, ' ') + " " + dr[1].ToString();
i++;
}
return returnArray;
} 7 Focus移动(跨列)public frmProdSetDetail()
{
InitializeComponent();
IsMod = flag; FarPoint.Win.Spread.InputMap im;
im = spdResult.GetInputMap(InputMapMode.WhenFocused);
im.Put(new Keystroke(Keys.Enter,Keys.None),SpreadActions.MoveToNextColumnWrap);
im.Put(new Keystroke(Keys.Tab,Keys.None),SpreadActions.MoveToNextColumnWrap); im = spdResult.GetInputMap(InputMapMode.WhenAncestorOfFocused);
im.Put(new Keystroke(Keys.Enter,Keys.None),SpreadActions.MoveToNextColumnWrap);
im.Put(new Keystroke(Keys.Tab,Keys.None),SpreadActions.MoveToNextColumnWrap);
} 指定单元格获得焦点 
this.fpSpread1.ActiveSheet.SetActiveCell(row,column); 8 事件触发顺序 
_Enter _EnterCell _EditModeOn _EditChange _EditModeOff _LeaveCell 9 用隐藏列保存原始数据  10 设定列类型
private void SpreadSetting()
{
string[] ProductHandleTypeList = new string[]{" ","1 販売/仕入","2 販売","3 仕入"}; FarPoint.Win.Spread.CellType.ComboBoxCellType cb3 = newFarPoint.Win.Spread.CellType.ComboBoxCellType();
cb3.ListWidth = 100;
cb3.Editable = true;
cb3.MaxDrop = 5;
cb3.MaxLength = 1;
cb3.Items = ProductHandleTypeList; this.spdResult.ActiveSheet.Columns[5].CellType = cb3;
//设置一般数据型 
FarPoint.Win.Spread.CellType.NumberCellType nmbrcell = newFarPoint.Win.Spread.CellType.NumberCellType();
nmbrcell.ShowSeparator = false;
nmbrcell.DecimalPlaces = 0;
nmbrcell.LeadingZero = FarPoint.Win.Spread.CellType.LeadingZero.UseRegional;
nmbrcell.MaximumValue = 9999;
nmbrcell.MinimumValue = 1;
this.spdResult.ActiveSheet.Columns[13].CellType = nmbrcell; //设置JAN
FarPoint.Win.Spread.CellType.NumberCellType nmbrcellJan = newFarPoint.Win.Spread.CellType.NumberCellType();
nmbrcellJan.ShowSeparator = false;
nmbrcellJan.DecimalPlaces = 0;
nmbrcellJan.LeadingZero = FarPoint.Win.Spread.CellType.LeadingZero.UseRegional;
nmbrcellJan.MaximumValue = 9999999999999;
nmbrcellJan.MinimumValue = 0;
this.fpSpread1.ActiveSheet.Columns[0].CellType = nmbrcellJan;
this.fpSpread1.ActiveSheet.Columns[0].HorizontalAlignment =FarPoint.Win.Spread.CellHorizontalAlignment.Left; //
FarPoint.Win.Spread.CellType.NumberCellType numberCellType1 = newFarPoint.Win.Spread.CellType.NumberCellType();
numberCellType1.ShowSeparator = true;
numberCellType1.DecimalPlaces = 0;
numberCellType1.LeadingZero = FarPoint.Win.Spread.CellType.LeadingZero.UseRegional;
numberCellType1.MaximumValue = 99999999;
numberCellType1.MinimumValue = 0;
this.spdResult.ActiveSheet.Columns[20].CellType = numberCellType1; //%数的设定
FarPoint.Win.Spread.CellType.PercentCellType prctcell = newFarPoint.Win.Spread.CellType.PercentCellType(); 
prctcell.PercentSign = "%";
this.spdResult.ActiveSheet.Columns[33].CellType = prctcell; //日期的设定
FarPoint.Win.Spread.CellType.DateTimeCellType datecell = newFarPoint.Win.Spread.CellType.DateTimeCellType(); 
datecell.MaximumDate = new System.DateTime(2050, 12, 31, 0, 0, 0, 0);
datecell.MinimumDate = new System.DateTime(2001, 1, 1, 0, 0, 0, 0); this.spdResult.ActiveSheet.Columns[27,30].CellType = datecell;
} 11 列、单元格锁定
//锁定
this.fpSpread1.ActiveSheet.Columns[0,4].Locked = true;//锁定列范围
this.fpSpread1.ActiveSheet.Columns[0].Locked = true;//锁定单列 //解锁
this.fpSpread1.ActiveSheet.Columns[0,4].Locked = false;//解锁列范围
this.fpSpread1.ActiveSheet.Columns[0].Locked = false;

如通过下面代码我们可以准确的判断单元格是否处于锁定状态: StyleInfo csi = new StyleInfo(); StyleInfo dsi = new StyleInfo(); fpSpread1.ActiveSheet.Models.Style.GetCompositeInfo(fpSpread1.ActiveSheet.ActiveRowIndex, fpSpread1.ActiveSheet.ActiveColumnIndex, -1, csi); fpSpread1.ActiveSheet.Models.Style.GetDirectInfo(fpSpread1.ActiveSheet.ActiveRowIndex, fpSpread1.ActiveSheet.ActiveColumnIndex, dsi); 

12 Spread追加行、列
//追加行
int rowindex = this.fpSpread1.ActiveSheet.Rows.Count;
this.fpSpread1.ActiveSheet.Rows.Add(rowindex,1); //追加列
int columnindex = this.fpSpread1.ActiveSheet.Columns.Count;
this.fpSpread1.ActiveSheet.Columns.Add(columnindex,1); 13 行、列删除
//删除行
this.fpSpread1.ActiveSheet.Rows.Remove(startindex,count); //追加列
this.fpSpread1.ActiveSheet.Columns.Remove(startindex,count); 14 button事件
private void spdSetList_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
{
int rowCount = e.Row;
int columnCount = e.Column; if (e.Column == 16)
{
if (message.ShowMessage("ConfirmDelete", "選択したライン") == DialogResult.Yes)
{
string DeleteTag = this.spdSetList.ActiveSheet.Cells[rowCount, columnCount+1].Text.Trim();
if (DeleteTag == "0" || DeleteTag == "2")
{
this.spdSetList.ActiveSheet.Cells[rowCount, columnCount+1].Text = "3";
this.spdSetList.ActiveSheet.Cells[rowCount,columnCount+1].BackColor = clrWater;
this.spdSetList.ActiveSheet.Rows[rowCount].Visible = false;
}
else if (DeleteTag == "1")
{
this.spdSetList.ActiveSheet.Rows[rowCount].Remove();
}
}
}
} ------------------------------------------------------------------
Spread 加载、插入、修改数据库-转载
--------------------------------------------------------------------- 以下是代码(只有三个按钮的代码,其他代码略)://修改 private void btnUpdate_Click(object sender, System.EventArgs e)
{
//首先判断spread行数大于0 if(fpSpread1.ActiveSheet.Rows.Count > 0)
{ dbproc.Open();//打开数据库,这是我自己的连接数据库类,请替换你自己的连接数据库部分 //循环更新 for(int i=0;i<fpSpread1.ActiveSheet.Rows.Count;i++)
{
string update = "update areas ";
update += " set areaName = '" + fpSpread1.ActiveSheet.Cells[i,2].Text.ToString().Trim() + "'";
update += " where areaCD = " + fpSpread1.ActiveSheet.Cells[i,0].Text.ToString().Trim(); dbproc.Execute(update);//更新数据库,这是我自己的更新数据库类,请替换你自己的连接数据库部分 }
dbproc.Close();//关闭数据库,这是我自己的关闭数据库类,请替换你自己的连接数据库部分 }
} //加载数据 private void btnLoad_Click(object sender, System.EventArgs e)
{
dbproc.Open();//打开数据库,这是我自己的连接数据库类,请替换你自己的连接数据库部分 string select = "select * from areas where areaCD < 100"; //定义一个Dataset DataSet ds= dbproc.OpenDataSet(select);//这是我自己的获取数据类,请替换你自己的获取数据库部分 //绑定数据 fpSpread1.ActiveSheet.DataSource = ds.Tables[0].DefaultView; dbproc.Close();//关闭数据库,这是我自己的关闭数据库类,请替换你自己的连接数据库部分 } //插入 private void btnInsert_Click(object sender, System.EventArgs e)
{
if(fpSpread1.ActiveSheet.Rows.Count > 0)
{
dbproc.Open();//打开数据库,这是我自己的连接数据库类,请替换你自己的连接数据库部分 for(int i=0;i<fpSpread1.ActiveSheet.Rows.Count;i++)
{
string insert = "insert into areas ..";(具体sql语句略) dbproc.Execute(insert);//这是我自己的插入数据类,请替换你自己的插入数据库部分 }
dbproc.Close();//关闭数据库,这是我自己的关闭数据库类,请替换你自己的连接数据库部分 } 
} --------------------------------------------------------------------- 解决使用spread时快捷键无反应的情况
-----------------------------------------------------------------------
如果我的画面中有快捷键,比如说“F1”、“F2”、“F3”等等,当你的焦点在spread里边时,你会发现你定义的那些快捷键有时候不反应,原因是焦点陷入spread里面,导致画面捕捉不到快捷键。FarPoint.Win.Spread.InputMap im; //spdResult是你画面中定义的spread的名字。
//WhenFocused:焦点离开时
im = spdResult.GetInputMap(InputMapMode.WhenFocused); //按回车键和TAB时,焦点移动到下一个单元格
im.Put(new Keystroke(Keys.Enter,Keys.None),SpreadActions.MoveToNextColumnWrap);
im.Put(new Keystroke(Keys.Tab,Keys.None),SpreadActions.MoveToNextColumnWrap); //按→、↓、←、↑时,焦点移动
im.Put(new Keystroke(Keys.Left,Keys.None),SpreadActions.MoveToPreviousColumn);
im.Put(new Keystroke(Keys.Right,Keys.None),SpreadActions.MoveToNextColumn); //使快捷键有效
im.Put(new Keystroke(Keys.F1,Keys.None),SpreadActions.None);
im.Put(new Keystroke(Keys.F2,Keys.None),SpreadActions.None);
im.Put(new Keystroke(Keys.F3,Keys.None),SpreadActions.None);
im.Put(new Keystroke(Keys.F8,Keys.None),SpreadActions.None);
im.Put(new Keystroke(Keys.F10,Keys.None),SpreadActions.None);
im.Put(new Keystroke(Keys.F12,Keys.None),SpreadActions.None); //WhenAncestorOfFocused:得到焦点时
im = spdResult.GetInputMap(InputMapMode.WhenAncestorOfFocused);
im.Put(new Keystroke(Keys.Enter,Keys.None),SpreadActions.MoveToNextColumnWrap);
im.Put(new Keystroke(Keys.Tab,Keys.None),SpreadActions.MoveToNextColumnWrap);

Farpoint Spread 常用事件的更多相关文章

  1. 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入

    我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...

  2. ios手势操作,四个基本事件与六个常用事件

    基本事件包括begin,canceled,move,ended四项,如果对象的hidden属性为yes,则无效果,hidden属性必须为no;才能使用: -(void)touchesBegan:(NS ...

  3. js-DOM-页面元素的兼容性、常用事件、节点

    页面元素的兼容性: 所谓的兼容性指的就是当前浏览器是否支持当前对象的属性或是方法,如果支持就是兼容,如果不支持就是不兼容. 举个例子: /** * 设置页面标签之间的文本内容的兼容性写法 * @par ...

  4. jQuery--引入,基本语法,以及常用事件

    一.初识jQuery jQuery是一个JavaScript函数库.主要包含的功能有:HTML元素的选取.操作,CSS操作,HTML事件函数,JavaScript特效和动画,HTML DOM遍历和修改 ...

  5. jQuery常用事件

    1.$(document).ready() $(document).ready()是jQuery中响应JavaScript内置的onload事件并执行任务的一种典型方式.它和onload具有类似的效果 ...

  6. 基础5.jQuery常用事件

    jQuery常用事件 1.bind() 方法 :为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数. 2.blur() 方法:当元素失去焦点时发生 blur 事件. 3.change() ...

  7. jQuery常用事件及扩展

    jquery中的常用事件 blur([[data],fn])     --失去焦点触发(鼠标)focus([[data],fn])  --得到焦点触发(鼠标)change([[data],fn]) - ...

  8. jq常用事件(on,blur,focus,change),js/jq等待图片(页面)加载完毕事件,js读取文件

    jq常用事件(on,blur,focus,change) // 方法一(推荐) $('.box').on( "click",function() {} ) $('.box').on ...

  9. 【jQuery】(4)---jQuery常用事件

    [jQuery入门](4)---jQuery常用事件 一.常用事件列表 1.blur() 当失去焦点时触发.包括鼠标点击离开和TAB键离开. 2.change() 当元素获取焦点后,值改变失去焦点事触 ...

随机推荐

  1. [Linux] 解压缩 tar 命令详解

    在Linux环境软件安装过程中通常需要用到解压命令,故在此总结下,以方便以后使用,若有不对之处,欢迎指正.   1. 文件压缩      通过压缩算法将文件的体积缩小,同时会将多个文件合并成至一起方便 ...

  2. Apache的Access.log分析总结

    Apache的Access.log分析总结 #查看80端口的tcp连接  #netstat -tan | grep "ESTABLISHED" | grep ":80&q ...

  3. mvp框架

    本文在于巩固基础 mvp框架的概念: MVP是MVC模式的另一个变种,MVP即可以应用到WEB项目中, 也可以应用到Winform项目中,它的方便的测试机制为大型复杂的企业级应用带来了福音,MVP模式 ...

  4. break与continue

    1.break与continue.这两个关键字一般放在循环的花括号里面使用.break——结束整个循环.continue——结束本次循环,进入下次循环. break的案例: int i = 1; fo ...

  5. c++中参数传递和函数返回简析

    1.参数传递: 每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参.形参的初始化与变量的初始化一样. 非引用类型:如果形参具有非引用类型,则复制实参的值.普通的非引用类 ...

  6. js——DOM操作(二)

    表格属性: tHead:表格头 tBodies:表格正文 tFoot:表格尾 rows:行 cells:列 表单操作: <form id="form1"> <in ...

  7. 小鱼提问3 static方法中可以访问某个类的私有变量吗(不通过反射的其他非正常手段)?什么情况下可以?

    class Student { private string _name; public int Age = 0; public static void Test() { Student stu = ...

  8. Linux学习之less命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  9. JVM学习之常见溢出类型

    Java堆 所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示: public class HeapOOM { static class OOMObje ...

  10. fputcsv 和 fgetcsv

    public function putcsv(){ $list = M("ad")->limit(0,10)->select(); $fp = fopen('./fil ...