如何解决如果 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 举报,一经查实,本站将立刻删除。