/// <summary>
/// Load the specified range data into a string array. This method use the cell editor to get the value.
/// </summary>
/// <param name="sourceGrid"></param>
/// <param name="sourceRange"></param>
/// <param name="startDragPosition">Starting drag position. Used only for calculating drop destination range.</param>
/// <param name="cutMode">Cut mode. Can be used to remove the data from the source when pasting it to the destination or immediately.</param>
public void LoadData(GridVirtual sourceGrid, Range sourceRange, Position startDragPosition, CutMode cutMode)
{
mSourceGrid = sourceGrid;
mCutMode = cutMode;
mStartDragPosition = startDragPosition;
mSourceRange = sourceRange;
mSourceValues = new string[mSourceRange.RowsCount, mSourceRange.ColumnsCount];
int arrayRow = 0;
for (int r = mSourceRange.Start.Row; r <= mSourceRange.End.Row; r++, arrayRow++)
{
int arrayCol = 0;
for (int c = mSourceRange.Start.Column; c <= mSourceRange.End.Column; c++, arrayCol++)
{
Position posCell = new Position(r, c);
Cells.ICellVirtual cell = sourceGrid.GetCell(posCell);
CellContext cellContext = new CellContext(sourceGrid, posCell, cell);
if (cell != null && cell.Editor != null && cell.Editor.IsStringConversionSupported())
mSourceValues[arrayRow, arrayCol] = cell.Editor.ValueToString( cell.Model.ValueModel.GetValue(cellContext) );
else if (cell != null)
mSourceValues[arrayRow, arrayCol] = cellContext.DisplayText;
}
}
//Cut Data
if (CutMode == CutMode.CutImmediately && sourceGrid != null)
{
sourceGrid.ClearValues(new RangeRegion(sourceRange));
//for (int sr = sourceRange.Start.Row; sr <= sourceRange.End.Row; sr++)
// for (int sc = sourceRange.Start.Column; sc <= sourceRange.End.Column; sc++)
// {
// Position pos = new Position(sr, sc);
// Cells.ICellVirtual cell = sourceGrid.GetCell(sr, sc);
// CellContext cellContext = new CellContext(sourceGrid, pos, cell);
// if (cell.Editor != null)
// cell.Editor.ClearCell(cellContext);
// }
}
mClipboardDataObject = new System.Windows.Forms.DataObject();
mClipboardDataObject.SetData(RANGEDATA_FORMAT, this);
mClipboardDataObject.SetData(typeof(string), DataToString(mSourceValues, mSourceRange));
}