确定数据网格中多个选定单元格的形状

时间:2011-09-28 11:09:32

标签: .net datagrid matrix infragistics point

我正在使用Infragistics UltraWinGrid来呈现一些数据。我需要一些Excel复制/粘贴功能。这很容易。

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

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

  3. 我希望通过比较Point结构列表或者沿着那些线的东西来实现这一点。

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

    Working image

    1。这很好,请参阅边缘单元格(duh)

    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
    

    谢谢,汤姆

1 个答案:

答案 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

太容易了。