问题描述
我正在使用 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 (将#修改为@)