如何才能达到筛选后跨行拖拉的问题
本帖最后由 pblandscape 于 2017-3-29 18:55 编辑参见附件,如何才能达到筛选后跨行拖拉的问题 Spread WPF没有提供这样的功能。一个解决方案是在填充前缓存数据,填充后判断如果是被过滤的行就恢复。
object[,] cacheFillRangeData;
private void GcSpreadSheet1_DragFillBlock(object sender, GrapeCity.Windows.SpreadSheet.UI.DragFillBlockEventArgs e)
{
cacheFillRangeData = gcSpreadSheet1.ActiveSheet.GetArray(e.FillRange.Row, e.FillRange.Column, e.FillRange.RowCount, e.FillRange.ColumnCount);
}
private void GcSpreadSheet1_DragFillBlockCompleted(object sender, GrapeCity.Windows.SpreadSheet.UI.DragFillBlockCompletedEventArgs e)
{
if (!gcSpreadSheet1.ActiveSheet.RowFilter.IsFiltered)
{
return;
}
for (var i = 0; i < e.FillRange.RowCount; i++)
{
int row = e.FillRange.Row + i;
if (gcSpreadSheet1.ActiveSheet.RowFilter.IsRowFilteredOut(row))
{
for (var j = 0; j < e.FillRange.ColumnCount; j++)
{
int col = e.FillRange.Column + j;
gcSpreadSheet1.ActiveSheet.Cells.Value = cacheFillRangeData;
}
}
}
} dexteryao 发表于 2017-3-30 09:37
Spread WPF没有提供这样的功能。一个解决方案是在填充前缓存数据,填充后判断如果是被过滤的行就恢复。
有另外一个问题出来了,就是本来我下面的cell是锁定的,也就是不运行他手动修改值的。
结果一拖拉,把下面cell的值替换了,连格式也替换了,
请解决这个问题。 将格式页缓存起来。然后恢复就好了。
object[,] cacheFillRangeData;
GrapeCity.Windows.SpreadSheet.Data.StyleInfo[,] cacheFillRangeStyle;
private void GcSpreadSheet1_DragFillBlock(object sender, GrapeCity.Windows.SpreadSheet.UI.DragFillBlockEventArgs e)
{
if (gcSpreadSheet1.ActiveSheet.RowFilter.IsFiltered)
{
cacheFillRangeData = gcSpreadSheet1.ActiveSheet.GetArray(e.FillRange.Row, e.FillRange.Column, e.FillRange.RowCount, e.FillRange.ColumnCount);
cacheFillRangeStyle = new GrapeCity.Windows.SpreadSheet.Data.StyleInfo;
for (var i = 0; i < e.FillRange.RowCount; i++)
{
int row = e.FillRange.Row + i;
if (gcSpreadSheet1.ActiveSheet.RowFilter.IsRowFilteredOut(row))
{
for (var j = 0; j < e.FillRange.ColumnCount; j++)
{
int col = e.FillRange.Column + j;
cacheFillRangeStyle = gcSpreadSheet1.ActiveSheet.GetStyleInfo(row, col, GrapeCity.Windows.SpreadSheet.Data.SheetArea.Cells);
}
}
}
}
}
private void GcSpreadSheet1_DragFillBlockCompleted(object sender, GrapeCity.Windows.SpreadSheet.UI.DragFillBlockCompletedEventArgs e)
{
if (gcSpreadSheet1.ActiveSheet.RowFilter.IsFiltered)
{
for (var i = 0; i < e.FillRange.RowCount; i++)
{
int row = e.FillRange.Row + i;
if (gcSpreadSheet1.ActiveSheet.RowFilter.IsRowFilteredOut(row))
{
for (var j = 0; j < e.FillRange.ColumnCount; j++)
{
int col = e.FillRange.Column + j;
gcSpreadSheet1.ActiveSheet.Cells.Value = cacheFillRangeData;
gcSpreadSheet1.ActiveSheet.SetStyleInfo(row, col, cacheFillRangeStyle);
}
}
}
cacheFillRangeData = null;
cacheFillRangeStyle = null;
}
} dexteryao 发表于 2017-3-30 15:21
将格式页缓存起来。然后恢复就好了。
我的意思是,下面的cells是locked状态的,不允许通过拖拉来改值 这个做不到,在没有设置保护的情况下,locked其实是不起作用的,设置了保护后拖拽只能在连续的没locked区域进行。
如果您想实现不保护还能跨域locked 拖拽,可是参考上面的代码,判断如果单元格是locked也恢复原来的值。
页:
[1]