找回密码
 立即注册

QQ登录

只需一步,快速开始

beitesting

中级会员

28

主题

92

帖子

794

积分

中级会员

积分
794

活字格认证

beitesting
中级会员   /  发表于:2016-7-7 10:19  /   查看:4229  /  回复:8
版本:Spread8.0J Windows Form
条件:
     1. EditModePermanent属性为True
     2. OperationMode属性为Normal,
     3. 一页表示的行数5行,1~5行的单元格的Locked属性为True,6行的单元格的Locked属性为False

问题:
     当激活单元格为6行B列时(TopRow为2行),通过滚动条使第一行在当前页能够表示(TopRow为1行),然后用鼠标单击第一行的单元格后,此时,当前Spread的TopRow变更为了2行。如何使当单击第一行的单元格后,TopRow为1行?


 
A
B
C
D
1
    
2
    
3
    
4
    
5
    
6
  |  


8 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-7 10:47:19
沙发
您好,您的描述我没太清楚您的目的,
如果您是希望指定行到第一行显示,可以使用
fpSpread1.ShowRow(0, 20, VerticalPosition.Top);
这样第21行会显示到第一行
回复 使用道具 举报
beitesting
中级会员   /  发表于:2016-7-7 11:13:49
板凳
dexteryao 发表于 2016-7-7 10:47
您好,您的描述我没太清楚您的目的,
如果您是希望指定行到第一行显示,可以使用
fpSpread1.ShowRow(0,  ...

前提条件:
  一页能够正好显示5行数据,并且1~5行所有的单元格都是Locked属性为True。
  第6行的所有单元格的Locked属性为False。当前激活的单元格为第6行的单元格。

我想实现的效果:
  当我单击第一行的时候,第一行能够表示。但是现在的效果是第一行没有表示。
回复 使用道具 举报
beitesting
中级会员   /  发表于:2016-7-7 11:27:26
地板
dexteryao 发表于 2016-7-7 10:47
您好,您的描述我没太清楚您的目的,
如果您是希望指定行到第一行显示,可以使用
fpSpread1.ShowRow(0,  ...
  1. 示例代码:
  2. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
  3. Partial Class Form1
  4.     Inherits System.Windows.Forms.Form

  5.     'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
  6.     <System.Diagnostics.DebuggerNonUserCode()> _
  7.     Protected Overrides Sub Dispose(ByVal disposing As Boolean)
  8.         Try
  9.             If disposing AndAlso components IsNot Nothing Then
  10.                 components.Dispose()
  11.             End If
  12.         Finally
  13.             MyBase.Dispose(disposing)
  14.         End Try
  15.     End Sub

  16.     'Windows フォーム デザイナーで必要です。
  17.     Private components As System.ComponentModel.IContainer

  18.     'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
  19.     'Windows フォーム デザイナーを使用して変更できます。  
  20.     'コード エディターを使って変更しないでください。
  21.     <System.Diagnostics.DebuggerStepThrough()> _
  22.     Private Sub InitializeComponent()
  23.         Me.FpSpread1 = New FarPoint.Win.Spread.FpSpread()
  24.         Me.FpSpread1_Sheet1 = New FarPoint.Win.Spread.SheetView()
  25.         CType(Me.FpSpread1, System.ComponentModel.ISupportInitialize).BeginInit()
  26.         CType(Me.FpSpread1_Sheet1, System.ComponentModel.ISupportInitialize).BeginInit()
  27.         Me.SuspendLayout()
  28.         '
  29.         'FpSpread1
  30.         '
  31.         Me.FpSpread1.AccessibleDescription = ""
  32.         Me.FpSpread1.Location = New System.Drawing.Point(33, 31)
  33.         Me.FpSpread1.Name = "FpSpread1"
  34.         Me.FpSpread1.Sheets.AddRange(New FarPoint.Win.Spread.SheetView() {Me.FpSpread1_Sheet1})
  35.         Me.FpSpread1.Size = New System.Drawing.Size(330, 141)
  36.         Me.FpSpread1.TabIndex = 0
  37.         '
  38.         'FpSpread1_Sheet1
  39.         '
  40.         Me.FpSpread1_Sheet1.Reset()
  41.         Me.FpSpread1_Sheet1.SheetName = "Sheet1"
  42.         '
  43.         'Form1
  44.         '
  45.         Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
  46.         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
  47.         Me.ClientSize = New System.Drawing.Size(468, 303)
  48.         Me.Controls.Add(Me.FpSpread1)
  49.         Me.Name = "Form1"
  50.         Me.Text = "Form1"
  51.         CType(Me.FpSpread1, System.ComponentModel.ISupportInitialize).EndInit()
  52.         CType(Me.FpSpread1_Sheet1, System.ComponentModel.ISupportInitialize).EndInit()
  53.         Me.ResumeLayout(False)

  54.     End Sub

  55.     Friend WithEvents FpSpread1 As FarPoint.Win.Spread.FpSpread
  56.     Friend WithEvents FpSpread1_Sheet1 As FarPoint.Win.Spread.SheetView
  57. End Class



  58. Public Class Form1
  59.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  60.         Me.FpSpread1.Reset()
  61.         Me.FpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.Normal
  62.         Me.FpSpread1.EditModePermanent = True
  63.         Me.FpSpread1.EditModeReplace = True
  64.         Me.FpSpread1.Size = New Size(379, 141)
  65.         Me.FpSpread1.ActiveSheet.Cells(0, 0, 4, Me.FpSpread1.ActiveSheet.ColumnCount - 1).Locked = True
  66.         Me.FpSpread1.ActiveSheet.SetActiveCell(5, 0)
  67.     End Sub
  68. End Class
复制代码


再现步骤:
1.通过滚动滚动条,是第一行能够表示
2.单击第一行的任意一个单元格
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-7 12:12:22
5#
您的问题我重现了,你设置了Me.FpSpread1.EditModePermanent = True 又想可以点击选择locked 的单元格,这个是做不到的。

如果您是希望locked 的单元格可以正常选择,并且当点上一个没有loced 的单元格自动进入编辑状态。您可以在cellClick事件中判断这个单元室否是locked 是的话什么都不做,不是得话设置 Me.FpSpread1.EditMode = True 进入编辑状态
回复 使用道具 举报
beitesting
中级会员   /  发表于:2016-7-7 15:06:17
6#
dexteryao 发表于 2016-7-7 12:12
您的问题我重现了,你设置了Me.FpSpread1.EditModePermanent = True 又想可以点击选择locked 的单元格,这 ...

如果当前激活的单元格是7行的单元格,当我单击第一行的时候,第一行就能够正常表示。
这个是怎么做到的?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-7 16:51:13
7#
因为第六行刚好能被看到,Spread自动将他显示出来,而第七行始终看不到,所以就不显示,你可以把高度再设置小一点,第六行也就不自动显示了。
Me.FpSpread1.Size = New Size(379, 130)
回复 使用道具 举报
beitesting
中级会员   /  发表于:2016-7-7 17:22:31
8#
dexteryao 发表于 2016-7-7 16:51
因为第六行刚好能被看到,Spread自动将他显示出来,而第七行始终看不到,所以就不显示,你可以把高度再设置 ...

如果改动SPread的大小就会导致,在最后的行后有空白的区域。
我利用下面的方案解决了该问题。
  1.     Private isClickLockCell As Boolean = False
  2.     Private intTopRow As Integer = 0

  3.     Private Sub FpSpread1_CellClick(sender As Object, e As CellClickEventArgs) Handles FpSpread1.CellClick

  4.         If Me.FpSpread1.ActiveSheet.Cells(e.Row, e.Column).Locked = True AndAlso
  5.             Me.FpSpread1.ActiveSheet.ActiveRowIndex = Me.FpSpread1.GetViewportBottomRow(0) Then
  6.             isClickLockCell = True
  7.             intTopRow = Me.FpSpread1.GetViewportTopRow(0)

  8.         End If
  9.     End Sub

  10.     Private Sub FpSpread1_TopChange(sender As Object, e As TopChangeEventArgs) Handles FpSpread1.TopChange

  11.         If isClickLockCell = True Then
  12.             isClickLockCell = False
  13.             Me.FpSpread1.ShowRow(0, intTopRow, VerticalPosition.Top)
  14.         End If

  15.     End Sub
复制代码

评分

参与人数 1金币 +500 收起 理由
dexteryao + 500 很给力!

查看全部评分

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-7 17:33:24
9#

这个解决方案不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部