177 lines
4.1 KiB
C#
177 lines
4.1 KiB
C#
using System;
|
|
using CPF.ReoGrid.Data;
|
|
using CPF.ReoGrid.Events;
|
|
using CPF.ReoGrid.Utility;
|
|
|
|
namespace CPF.ReoGrid.Chart
|
|
{
|
|
public class WorksheetChartDataSerial : IChartDataSerial, IDataSerial
|
|
{
|
|
public Worksheet Worksheet { get; protected set; }
|
|
|
|
public virtual RangePosition DataRange
|
|
{
|
|
get
|
|
{
|
|
return this.dataRange;
|
|
}
|
|
set
|
|
{
|
|
bool flag = this.dataRange != value;
|
|
if (flag)
|
|
{
|
|
this.dataRange = value;
|
|
this.dataSource.OnDataChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
public CellPosition LabelAddress { get; set; }
|
|
|
|
protected WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, CellPosition labelAddress)
|
|
{
|
|
bool flag = dataSource == null;
|
|
if (flag)
|
|
{
|
|
throw new ArgumentNullException("dataSource");
|
|
}
|
|
bool flag2 = worksheet == null;
|
|
if (flag2)
|
|
{
|
|
throw new ArgumentNullException("worksheet");
|
|
}
|
|
this.dataSource = dataSource;
|
|
this.worksheet = worksheet;
|
|
this.LabelAddress = labelAddress;
|
|
bool flag3 = this.worksheet != null;
|
|
if (flag3)
|
|
{
|
|
this.worksheet.CellDataChanged += this.worksheet_CellDataChanged;
|
|
this.worksheet.RangeDataChanged += this.worksheet_RangeDataChanged;
|
|
}
|
|
}
|
|
|
|
~WorksheetChartDataSerial()
|
|
{
|
|
try
|
|
{
|
|
bool flag = this.worksheet != null;
|
|
if (flag)
|
|
{
|
|
this.worksheet.CellDataChanged -= this.worksheet_CellDataChanged;
|
|
this.worksheet.RangeDataChanged -= this.worksheet_RangeDataChanged;
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
}
|
|
|
|
public WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, CellPosition labelAddress, RangePosition dataRange) : this(dataSource, worksheet, labelAddress)
|
|
{
|
|
this.dataRange = dataRange;
|
|
}
|
|
|
|
public WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, string labelAddress, string addressOrName) : this(dataSource, worksheet, new CellPosition(labelAddress))
|
|
{
|
|
bool flag = RangePosition.IsValidAddress(addressOrName);
|
|
if (flag)
|
|
{
|
|
this.dataRange = new RangePosition(addressOrName);
|
|
}
|
|
else
|
|
{
|
|
bool flag2 = NamedRange.IsValidName(addressOrName);
|
|
if (!flag2)
|
|
{
|
|
throw new InvalidAddressException(addressOrName);
|
|
}
|
|
bool flag3 = this.worksheet != null;
|
|
if (!flag3)
|
|
{
|
|
throw new ReferenceObjectNotAssociatedException("Data source must associate to valid worksheet instance.");
|
|
}
|
|
NamedRange refRange;
|
|
bool flag4 = worksheet.TryGetNamedRange(addressOrName, out refRange);
|
|
if (!flag4)
|
|
{
|
|
throw new InvalidAddressException(addressOrName);
|
|
}
|
|
this.dataRange = refRange;
|
|
}
|
|
}
|
|
|
|
private void worksheet_CellDataChanged(object sender, CellEventArgs e)
|
|
{
|
|
CellPosition position = e.Cell.Position;
|
|
bool flag = this.dataRange.Contains(position) || this.LabelAddress == position;
|
|
if (flag)
|
|
{
|
|
this.dataSource.OnDataChanged();
|
|
}
|
|
}
|
|
|
|
private void worksheet_RangeDataChanged(object sender, RangeEventArgs e)
|
|
{
|
|
RangePosition range = e.Range;
|
|
bool flag = this.dataRange.IntersectWith(range) || range.Contains(this.LabelAddress);
|
|
if (flag)
|
|
{
|
|
this.dataSource.OnDataChanged();
|
|
}
|
|
}
|
|
|
|
public string Label
|
|
{
|
|
get
|
|
{
|
|
return (this.worksheet == null || this.LabelAddress.IsEmpty) ? string.Empty : this.worksheet.GetCellText(this.LabelAddress);
|
|
}
|
|
}
|
|
|
|
public int Count
|
|
{
|
|
get
|
|
{
|
|
return this.dataRange.Cols;
|
|
}
|
|
}
|
|
|
|
public double? this[int index]
|
|
{
|
|
get
|
|
{
|
|
bool flag = this.dataRange.Rows > this.dataRange.Cols;
|
|
object cellData;
|
|
if (flag)
|
|
{
|
|
cellData = this.worksheet.GetCellData(this.dataRange.Row + index, this.dataRange.Col);
|
|
}
|
|
else
|
|
{
|
|
cellData = this.worksheet.GetCellData(this.dataRange.Row, this.dataRange.Col + index);
|
|
}
|
|
double value;
|
|
bool flag2 = CellUtility.TryGetNumberData(cellData, out value);
|
|
double? result;
|
|
if (flag2)
|
|
{
|
|
result = new double?(value);
|
|
}
|
|
else
|
|
{
|
|
result = null;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
private WorksheetChartDataSource dataSource;
|
|
|
|
private Worksheet worksheet;
|
|
|
|
private RangePosition dataRange;
|
|
}
|
|
}
|