如果 DataTable 包含 Readonly 列,则 ListObject 和 DataTable 无法检测数据更改

问题描述

我正在使用 VSTO 创建一个 Excel 插件。我正在使用 ListObject 绑定一个 DataTable 来显示数据,并检测 Excel 中的变化。代码如下:

// .... get ListObject
hostedListObj = Globals.Factory.GetVstoObject(listObj);

if (hostedListObj.DataSource != null)
{
    hostedListObj.disconnect();
}

// add a column to ListObject
int cnt = hostedListObj.ListColumns.Count;
Interop.ListColumn column = hostedListObj.ListColumns.Add(cnt + 1);
column.Range.NumberFormat = "@"; // format as string
cnt = hostedListObj.ListColumns.Count;
column = hostedListObj.ListColumns[cnt];

column.Name = string.Format("{0}_{1}",parent.Name,this.Name);

Microsoft.Office.Interop.Excel.Range headerRange = listObj.HeaderRowRange.Cells[1,listObj.ListColumns.Count];
headerRange.Name = string.Format("{0}.{1}",this.Name);
headerRange.Value2 = this.Text;
}

// Add a column to a DataTable,the DataTable will be binded to above ListObject
if (!dt.Columns.Contains(this.Name))
{
    DataColumn col = dt.Columns.Add(this.Name,typeof(string));
    col.ReadOnly = this.IsReadly; // DataTable cannot detect changes with this setting?
}

hostedListObj.SetDataBinding(dt);

用于检查 Excel 中是否有任何更改的代码

System.Data.DataTable updatedTable = dt.GetChanges(System.Data.DaTarowState.Modified);
System.Data.DataTable deletedTable = dt.GetChanges(System.Data.DaTarowState.Deleted);
System.Data.DataTable addedTable = dt.GetChanges(System.Data.DaTarowState.Added);

如果数据表不包含只读字段,则一切正常(添加/更新/删除)。但是,如果我将 DataTable 中的某些字段设置为只读,则无法找到更改。有人可以帮忙吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...