【发布时间】:2008-12-27 00:06:32
【问题描述】:
这是我刚刚遇到的一件奇怪的事情。
我有一个 Web 应用程序,它在 ApplicationCache 中存储了一个小型 DataTable,以减少单独的查询量,因为数据是一个不经常更改的查找表。
我在给定页面内访问此 DataTable 两次。一次将数据绑定到我的 Page_Load 方法中的下拉列表:
dtDeptDivAct = GetAllDeptDivActCodes()
dtDeptDivAct.DefaultView.Sort = "LongDescription ASC"
ddlDeptDivAccount.DataSource = dtDeptDivAct.DefaultView
ddlDeptDivAccount.DataTextField = "LongDescription"
ddlDeptDivAccount.DataValueField = "Id"
ddlDeptDivAccount.DataBind()
...当在我的 ddlDeptDivAct_SelectedIndexChanged 事件中选择索引时从表中检索其他数据:
Dim dtDeptDivAct As DeptDivActDataTable
If ddlDeptDivAccount.SelectedIndex > 0 Then
dtDeptDivAct = GetAllDeptDivActCodes()
dtDeptDivAct.DefaultView.RowFilter = "Id = " & ddlDeptDivAccount.SelectedValue
txtAddFundingDept.Text = DirectCast(dtDeptDivAct.DefaultView(0).Row, DeptDivActRow).Department.ToString.PadLeft(2, Char.Parse("0"))
txtAddFundingDiv.Text = DirectCast(dtDeptDivAct.DefaultView(0).Row, DeptDivActRow).Division.ToString.PadLeft(2, Char.Parse("0"))
txtAddFundingAct.Text = DirectCast(dtDeptDivAct.DefaultView(0).Row, DeptDivActRow).Activity.ToString.PadLeft(3, Char.Parse("0"))
Else
txtAddFundingDept.Text = ""
txtAddFundingDiv.Text = ""
txtAddFundingAct.Text = ""
End If
注意:GetAllDeptDivActCodes() 方法是一个从 ApplicationCache 对象返回表的简单方法。
网页运行良好。我可以选择我的值并将正确的值插入到 TextBox 中。但是,当我转到其他页面并返回此页面时。我的下拉列表只有 1 个值可供选择。
当我拉起调试器时,我注意到在返回网页时,当 GetAllDeptDivActCodes 方法从缓存中返回 DataTable 时,DefaultView RowFilter 属性仍然应用于 DataTable,这导致了问题。
我已经通过在 SelectedIndexChanged 事件中完成处理后简单地重置 DefaultView RowFilter 来解决这个问题,但是为什么应用程序返回似乎是对应用程序缓存中 DataTable 的引用,而我期待对象的单独副本(或值)?
【问题讨论】:
标签: asp.net datatable application-cache