Переменная сеанса, назначенная таблице данных и создающая проблему со ссылкой на объект?

2

---- > У меня есть datatable, который переходит на другую страницу в переменной сеанса.

---- > Теперь на другой странице я беру переменную сессии в datatable.

datatable ds_table = new datatable();
ds_table = (datatable)session["table_value"]; 

---- > поэтому проблема заключается в том, что при фильтрации некоторых строк из ds_table. которые вступают в силу в переменной сеанса. если некоторые строки удалены из ds_table. то он также удаляется из переменной сеанса.

---- > Итак, кто-нибудь скажет мне, почему это происходит?

помогите мне. его необходимо.

  • 0
    НИЧЕГО НЕ НУЖНО ПОКРЫТЬ
  • 0
    хорошо спасибо. за ваш совет
Теги:

3 ответа

0
Лучший ответ

Я бы предложил вам скопировать данные, прежде чем размещать их в сеансе. Тогда это не будет зависеть от каких-либо изменений, которые вы сделаете позже исходных данных.

Все, что вам нужно сделать, это объявить новую переменную DataTable и скопировать ее:

private void CopyDataTable(DataTable table){
    // Create an object variable for the copy.
    DataTable copyDataTable;
    copyDataTable = table.Copy();

    // Insert code to work with the copy.
 }

Затем вы можете поместить copyDataTable в сеанс.

  • 0
    проблема не в том, чтобы сделать переменную сессии. Проблема в том, что взятие значения в datatable из переменной сеанса. и затем я делаю изменения в этой информации на другой странице. он принимает изменения в переменную сеанса.
  • 0
    Когда вы перейдете на другую страницу и захотите использовать DataTable из сеанса, создайте копию DataTable, которая находится в сеансе. затем вы можете изменить копию, не оказывая влияния на исходную таблицу данных, которая остается в сеансе.
Показать ещё 2 комментария
0

Хорошо, если session [ "table_value" ] указывает на datatable, и вы назначаете его значение (datatable) другой переменной, а THEN MAKE CHANGES эта переменная будет изменена в datatable, и вы увидите эффект, который вы проиллюстрировали.

----- Не всегда, но в том случае, когда вы проиллюстрировали (так же как datatable общий ресурс?)

  • 0
    это решение или совет?
0

Похоже, вы хотите сделать копию DataTable. Попробуйте следующее:

ds_table = ((datatable)session["table_value"]).Copy(); 

Это будет плохо, если DataTable большой, так что имейте это в виду. Тем не менее использование сеанса для большого DataTable в любом случае звучит как плохая идея!

Конечно, работает ли это или нет, зависит от того, где вы меняете свое состояние (я сделал некоторые большие предположения). Возможно, более подробно описано, что вы делаете, и получите дополнительную помощь (например, пример кода).

  • 0
    Я пытался, но это делает проблему. такой же как и у меня.
  • 0
    ХОРОШО. Пожалуйста, опубликуйте еще немного кода того, что вы делаете точно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню