AD
Administrator
Syncfusion Team
September 23, 2003 08:50 PM UTC
You have to handle the Model.ClipboardCopy event and copy the cells manually to the clipboard and skip hidden cells.
Once you are done copying text to the clipboard be sure to set e.Handled = true.
I am enclosing code from the grids CopyTextToBuffer method. You could adjust this code to your needs.
public bool CopyTextToBuffer(out string buffer, GridRangeInfoList rangeList, out int nRowsDone, out int nColsDone)
{
// store rows/columns indizes to process in an array
GridRangeInfoList rowRanges = rangeList.GetRowRanges(GridRangeInfoType.Cells|GridRangeInfoType.Rows);
GridRangeInfoList colRanges = rangeList.GetColRanges(GridRangeInfoType.Cells|GridRangeInfoType.Cols);
// determine no of rows/cols to process
int nRows = 0;
foreach (GridRangeInfo range in rowRanges)
nRows += range.Height;
int nCols = 0;
foreach (GridRangeInfo range in colRanges)
nCols += range.Width;
int dwSize = nRows*nCols;
nRowsDone = 0;
nColsDone = 0;
// status message, let the user abort the operation
using (OperationFeedback op = new OperationFeedback(Model))
{
op.Description = SR.GetString("GRID_IDM_COPYTEXT");
op.AllowCancel = true;
bool canceled = false;
bool bAnyChar = false;
string sTabDelim = "\t";
if (m_sExportTabDelim != null && m_sExportTabDelim.Length > 0)
sTabDelim = m_sExportTabDelim;
#if DEBUG
if (sTabDelim.Length > 1)
{
Trace.WriteLineIf(Switches.DataExchange.TraceWarning, "Warning: the length of m_sExportTabDelim in CopyTextToFile is more than one character!");
Trace.WriteLineIf(Switches.DataExchange.TraceWarning, String.Format("Columns will be separated with the following string: {0}", m_sExportTabDelim));
}
#endif
StringBuilder sb = new StringBuilder();
try
{
// fill pOldCellsArray row by row
for (int rowindex = 0; !canceled && rowindex < rowRanges.Count; rowindex++)
{
for (int nRow = rowRanges[rowindex].Top; nRow <= rowRanges[rowindex].Bottom; nRow++)
{
if (nRowsDone > 0)
sb.Append(Environment.NewLine);
bool firstCol;
firstCol = true;
nColsDone = 0;
for (int colindex = 0; !canceled && colindex < colRanges.Count; colindex++)
{
for (int nCol = colRanges[colindex].Left; nCol <= colRanges[colindex].Right; nCol++)
{
// Store styles in array, but allow user to abort
int dwIndex = nRowsDone*nCols+nColsDone;
if (!firstCol)
sb.Append(sTabDelim);
// Get text from control (and give control the chance
// to convert value into unformatted text or vice versa).
string sText = GetCopyTextRowCol(nRow, nCol);
sText = new StringBuilder(sText)
.Replace(Environment.NewLine, " ")
.Replace("\r", " ")
.Replace("\n", " ")
.ToString()
.Trim();
sb.Append(sText);
bAnyChar |= sText.Length > 0;
firstCol = false;
// check, if user pressed ESC to cancel
op.PercentComplete = (int) (dwIndex * 100 / dwSize);
if (op.ShouldCancel)
throw new GridUserCanceledException();
nColsDone++;
}
}
nRowsDone++;
}
}
}
catch(GridUserCanceledException ex)
{
TraceUtil.TraceExceptionCatched(ex);
if (!ExceptionManager.RaiseExceptionCatched(this, ex))
throw ex;
canceled = true;
}
if (nRowsDone > 1 || nColsDone > 1)
sb.Append(Environment.NewLine);
buffer = sb.ToString();
return !canceled && bAnyChar;
}
}
Stefan
TF
Terry Foster
October 20, 2003 01:47 PM UTC
I am also in need of this functionality (including pasting a range over only visible rows/columns). Have you considered making this an option?
Terry
AD
Administrator
Syncfusion Team
October 20, 2003 02:37 PM UTC
We'll be adding an option but it is not a priority right now. In 2.1 or later we will look again at current Clipboard behavior and make it more flexible and also provide more options. For now, you would need to implement your own approach.
Thanks,
Stefan