.NET 框架 4.5.2
操作系统: Windows Server 2012 RS 标准
IIS: 6.2
应用程序池: .NET CLR 版本 v.4.0.30319
托管管道模式:集成
Spread.NET 版本: 11.45.20183.0
注意: 仅当从我们的 Web 服务器托管在 IIS 中时,才会出现以下问题。在我的本地计算机上通过 IIS Express (v.10.0.18362.1) 托管时不会发生这种情况。在从 Web 服务器上的 Visual Studio 附加到正在运行的 IIS 进程 ID 时,我能够调试此问题。
ISSUE: 我们有一些逻辑来检查绑定到 FpSpread 控件的数据源中的更改。如果检测到更改,我们将提取存在增量的单元格值。代码检测更改没有问题;但是,返回的结果有问题。
示例代码:
public static DataTable getUpdatedGrid(FpSpread FpExcel, DataTable beforeDt)
{
FpExcel.SaveChanges();
if (FpExcel.Columns.Count == beforeDt.Columns.Count)
{
// No added headers. HasChanges does not track added headers.
if (((DataSet)FpExcel.DataSource).HasChanges())
{
DataTable changes = ((DataSet)FpExcel.DataSource).GetChanges().Tables[0];
etc...
上面的代码按预期工作,它检测到更改并将其放入“DataTable changes”语句。唯一的问题是如果更改涉及更改大小写,则该值不能反映用户所做的更改。例如,如果用户尝试将单元格从“单击”更改为“单击”,则“HasChanges”条件将评估为“真”;但是,该值仍然是“单击”。
下面是用户尝试将单元格值从“假”更改为“假”的屏幕截图。正如你所看到的,这个案子被保留了下来,没有被改变。
同样,这只发生在用户尝试更改单元格值的大小写时。将值更改为全新的东西可以按预期工作。
如前所述,这只发生在 IIS 中托管时。此外,绑定到控件的数据集将“CaseSensitive”设置为“true”,如下面的屏幕截图所示: