1. 程式人生 > >Spread控制元件基礎知識(基本常用屬性事件等)

Spread控制元件基礎知識(基本常用屬性事件等)

-----------------------基本用法

//取當前行號、列號

int row=e.Row; 
int count=e.Count;
或者:
int rowindex = fpSpread1.ActiveSheet.ActiveRowIndex;
int columnindex = fpSpread1.ActiveSheet.ActiveColumnIndex;

//單機行改變該行顏色

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)));
    }
   }
  }

//將Spread的單元格內容付值給一控制元件的Text,給指定單元格賦值

txtItemCD.Text = spdResult.Sheets[0].Cells[row,count].Text;

spdResult.Sheets[0].Cells[row,count].Text = txtItemCD.Text;

//通過游標改變行選中顏色

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))); 
   }
  }

//下拉列表載入資料

寫死資料來源

FarPoint.Win.Spread.CellType.ComboBoxCellType cb4 = new FarPoint.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 = new FarPoint.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;
  }

//焦點移動(跨列)

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);


//設定列的型別

private void SpreadSetting()

  {
   string[] ProductHandleTypeList = new string[]{" ","1 販売/仕入","2 販売","3 仕入"};
  
   FarPoint.Win.Spread.CellType.ComboBoxCellType cb3 = new FarPoint.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 = new FarPoint.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 = new FarPoint.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 = new FarPoint.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 = new FarPoint.Win.Spread.CellType.PercentCellType(); 
   prctcell.PercentSign = "%";
   this.spdResult.ActiveSheet.Columns[33].CellType = prctcell;
   
   //日期的設定
   FarPoint.Win.Spread.CellType.DateTimeCellType datecell = new FarPoint.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;
 }


//列單元格的鎖定

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;

//追加、刪除行列

追加行
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);

//刪除行
this.fpSpread1.ActiveSheet.Rows.Remove(startindex,count);
//刪除
this.fpSpread1.ActiveSheet.Columns.Remove(startindex,count);

-------------------------事件(觸發順序:_Enter    _EnterCell      _EditModeOn      _EditChange      _EditModeOff      _LeaveCell

 // 單元格編輯結束,焦點離開或者按回車鍵

private void fpSpread1_EditModeOff(object sender, System.EventArgs e) 

// 單元格得到焦點時觸發                  
private void fpSpread1_EnterCell(object sender, FarPoint.Win.Spread.EnterCellEventArgs e)         

 // 編輯單元格時觸發,單元格內容發生改變
 private void fpSpread1_EditChange(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e) 

// 編輯模式開始時觸發
private void fpSpread1_EditModeOn(object sender, System.EventArgs e) 

// 單元格失去焦點時觸發
   private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e) 
   { 
    if(this.spdSetList.ActiveSheet.RowCount ==0)         
    {         
     return;        
    }         
   }   

// 雙擊Spread時觸發         一般用來付值,比如把選中行內容傳給其他控制元件
private void fpSpread1_CellDoubleClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)      

// 單擊Spread時觸發         一般用來改變選中行的顏色
private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)   

// 一般用來檢測輸入內容是否合法,比如檢測輸入的內容是否是數字  
private void fpSpread1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)   

  {  
     if(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == 8 || e.KeyChar == 13) 
     { 
      e.Handled = false;
     } 
     else 
     { 
      e.Handled = true;
     } 
   } 

 // 用來捕捉按鈕列等屬於按鈕範疇的事件
private void spdSetList_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)