2011-09-28 55 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

哎唷!確實很簡單。現在繼續爲你做一份文書工作! –

相關問題