Это странная вещь, с которой я только что столкнулся.
У меня есть веб-приложение с небольшой таблицей DataTable, хранящейся в ApplicationCache, чтобы сократить количество запросов до отдельного, поскольку данные являются справочной таблицей, которая меняется не часто.
Я получаю доступ к этой таблице данных дважды на данной странице. Один раз, чтобы связать данные с выпадающим списком в моем методе 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 из кэша, свойство DataView RowFilter все еще применяется к DataTable, что и вызывает проблему. *
Я исправил проблему на данный момент, просто сбросив RowFilter DefaultView после того, как обработка выполнена в событии SelectedIndexChanged, но почему приложение возвращает то, что представляется ссылкой на DataTable в кеше приложения, когда я ожидал отдельная копия (или значение) объекта?