2014-09-01 3 views
1

У меня есть путь к файлу, который я передаю через viewstate (ссылаясь на ссылку, индекс в этой таблице), желая затем использовать путь из таблицы, чтобы построить HTTP filetransfer , (So ​​3 cols, имя, путь и индекс)C# Viewstate - cant retrieve table

Я не могу успешно извлечь данные, сохраненные после сохранения в viewstate;

ViewState["varFiles"] = filedata; 

(Если страница первоначально построена, то после постбэка :)

if (!IsPostBack) { SetupSession(); newpopfiles(); } 
    else { { if (ViewState["varFiles"] != null) { DataTable filedata = new DataTable(); filedata = (DataTable)Session["varFiles"]; } } } 

Из того, что я понимаю, это должно отступить FILEDATA в виде таблицы в той же форме, как и раньше постбэка. Это верно?

При последующем обращении к таблице я получаю исключение с нулевой ссылкой. Есть идеи?

Большое спасибо, Dan

+0

'Session'! =' ViewState'. (Проверьте код, почему это наблюдение имеет смысл.) – user2864740

+0

Почему вы используете сеанс, если datatable хранится в viewstate –

+0

Ah. Спасибо, ребята, я извлек это из предыдущего примера и подумал, что сеанс - это средство извлечения из ViewState. – DanB

ответ

1

Похоже, вы уже почти там, просто нужно быть немного более последовательным с использованием того же механизма хранения :)

бит, чтобы сохранить DataTable в ваш сессия, вероятно, в OnInit() или PageLoad():

DataTable myDataTable = //... fill it in somehow 
Session["varFiles"] = myDataTable; 

бит читать DataTable после постбэка:

if (!IsPostBack) 
{ 
    SetupSession(); 
    newpopfiles(); 
} 
else 
{ 
    DataTable filedata = Session["varFiles"] as DataTable; 
    if (filedata != null) 
    { 
     //... do something 
    } 
} 
+0

Отлично - это решило это :) спасибо. – DanB

+0

Это значимо сложнее, чем Excel VBA ... – DanB

+0

Только * бит * труднее :) Пожалуйста, поддержите и примите ответ, если это поможет. – demoncodemonkey