我正在使用Infragistics UltraWinGrid来呈现一些数据。我需要一些Excel复制/粘贴功能。这很容易。
我想要做的是确定选择的形状,并确保它是相邻单元格的矩形。如果不是,则显示错误(因为粘贴所述数据只会导致错误)。
然后我需要检测所有边界边缘单元格,这样我就可以在单元格周围放置一个“你已经复制过这个”边框,例如Excel。
我希望通过比较Point结构列表或者沿着那些线的东西来实现这一点。
为了更好地说明问题,这里有一些图片:
1。这很好,请参阅边缘单元格(duh)
]
2。这不起作用,我试图复制太多,显示错误
3。用户现在还没有学到这不会起作用。你甚至可以看到我从纯粹的懒惰中复制了“错误”的单元格。
我有一个点和单元格词典,随时准备使用。有任何想法吗? C#/ VB很好。
更新 这可能会有所帮助吗?
采取第二个图表:
0,0 1,0 2,0
0,1 1,1 2,1
0,2 1,2 2,2
0,3 1,3 2,3
1,4 <<< wrong
谢谢,汤姆
答案 0 :(得分:0)
好的我已经对此有了一个很好的想法,GertArnold指出了我正确的方向,只是说“允许有一个洞的细胞范围?”
当你花费6个月没有编码或解决问题时会发生这种情况,由于大量的文书工作和审计要求,你忘记了如何开始一个简单的算法。
伤害很容易。首先,我从数据表中获取单元格并重新格式化它们,使它们基于零(而不是它们在网格上的实际位置)。我通过简单地否定{0,0}
处的单元格值并将其应用于所有单元格来实现此目的。
要计算间隙,请执行以下操作:
Private Function HasGapsInCells(points As List(Of CellPoint)) As Boolean
Dim colCount As Integer = points.GroupBy(Function(x) x.Column).Count()
Dim rowCount As Integer = points.GroupBy(Function(x) x.Row).Count()
For row As Integer = 0 To rowCount - 1
Dim rowL As Integer = row
For col As Integer = 0 To colCount - 1
Dim colL As Integer = col
If Not points.Exists(Function(x) x.Row = rowL And x.Column = colL) Then
Return True '-- There are gaps'
End If
Next
Next
Return False
End Function
太容易了。