2011-09-28 54 views
0

我正在使用Infragistics UltraWinGrid呈现一些数据。我需要一些Excel复制/粘贴功能。这很简单。确定数据网格中多个选定单元格的形状

  1. 我想要做的就是确定选择的形状,并确保它的相邻单元的矩形。如果不是,则会显示错误(因为粘贴所述数据只会导致错误)。

  2. 然后我需要检测所有的边界边缘单元格,这样我就可以在单元格ala Excel中放置一个“你已经复制了这个”边框。

我希望通过比较Point结构或类似的规定列表来实现这一点。

为了说明问题更好,这里有一些图片:

Working image

1.这是罚款,看到边缘细胞(杜)

Fail image]

2.这不起作用,我试图复制太多,显示错误

Another fail image

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

另外,我认为问题的一部分是,我不知道矩形边界是在什么位置... – Tom

+1

为了确保我理解:所以你想在从Excel中粘贴选择之前检查这个形状进入电网?并且是允许有孔的一系列单元格? –

+0

@GertArnold是的,但不是Excel,它将成为我自己的DataGrid控件。今天我写了一个枚举选定单元格的小算法并生成一个点列表,然后将它们翻译为零(例如{1,2} {1,3}变为{0,1} {0,2}等等),这是一个开始。事实上,从这里我可以写出实际的复制/粘贴功能。我使用LINQ GroupBy()在X和Y坐标上分组,从而产生行数和列数('cells.GroupBy(Function(x)x.Row).Count()')。最后我写了一些扩展粘贴区域的内容,这些内容是基于复制的内容进行的,因此正在取得进展! – Tom

回答

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 

那么容易。

+0

哎唷!确实很简单。现在继续为你做一份文书工作! –

相关问题