微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如果 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?