2016-12-15 3 views
0
Заполнение

В настоящее время я работаю над проектом asp.net webforms и у меня есть страница сGridview

  • asp:textbox
  • asp:DropDownList
  • asp:linkbutton

У меня также есть asp:gridview на той же странице, и мне нужно вставить новую строку на нее всякий раз, когда я нажимал linkbuttonс чтобы сохранить данные в DataBase. То, что я использовал для этого, заключается в сохранении данных в списке ViewState.

Итак, мой вопрос: нет ли лучшего способа сделать это? если да, пожалуйста, подробно покажите его.

Обновление: я не должен потерять данные сетки, когда происходит PostBack.

+0

Возможный дубликат [Добавить строку в табличном] (http://stackoverflow.com/questions/19257451/add-row-to-grid-view) – VDWWD

+0

@VDWWD Пожалуйста, ознакомьтесь с обновлениями – Null

ответ

1

Вы ищете ASP .NET State Management и Есть несколько способов борьбы с ним:

  • Посмотреть состояние
  • состояние управления
  • Скрытые поля
  • Печенье
  • строки запроса
  • Состояние приложения
  • состояние сеанса
  • Свойства профиля

С, которого не предоставляют больше информации я хотел бы предложить вам использовать состояние сеанса для сохранения данных, так как это самый простой способ сделать это, потому что информация будет храниться на на стороне сервера, где он принадлежит (вместо неправильного использования ViewState, где информация собирается дважды клиенту, одна в GridView.DataBind() и еще одна в ViewState). Вам нужно сделать что-то вроде этого:

MyGridView.Datasource = (List<Object>)Session["myGridViewData"]; 
MyGridView.DataBind();  

Всякий раз, когда вы вставляете/удалить/изменить новую строку, которую необходимо обновить набор данных в вашей переменной myGridViewData Session.

И помните, чтобы обновить GridView.DataSource на каждом постбэка поэтому вы не потеряете информацию:

protected void Page_Load(object sender, EventArgs e) 
{ 
    grid1.DataSource = getDataSet(); 
    grid1.DataBind();  
} 

private List<Object> getDataSet() 
{ 
    if (Session["myGridViewData"] == null) 
     Session["myGridViewData"] = new List<employee>();    

    return (List<Object>)Session["myGridViewData"]; 
} 

protected void addNewRowButton_Click(object sender, EventArgs e) 
{ 
    List<Object> list = (List<Object>)Session["myGridViewData"];  
    list.Add(new Object()); 
    Session["myGridViewData"] = list; 
} 

Имейте в виду , что не является хорошей практикой для обновления элементов управления на Page_Load случае, вместо него вы должны обращаться который из ваших postbacks обновляет данные и обновляет сетку при методах apropiate (первая загрузка страницы и добавление/изменение/удаление строки).

При использовании .NET Framework 4.5 или выше я посоветую вам использовать связывание GridView модель (SelectMethod) GridView Model Binding С этим не necesary обновить DataSource на каждом постбэка явно в методе Page_Load, который является экологически чистым способом делать это.

EDIT: От here

состояния сеанса или ViewState?

Есть определенные случаи, когда сохранение значения состояния в ViewState равно не самый лучший вариант. Наиболее часто используемой альтернативой является Сессия состояние, которое, как правило, лучше всего подходит для:

  • Большие объемы данных. Поскольку ViewState увеличивает размер как страницы, отправленной в браузер (полезная нагрузка HTML), так и размера формы , отправленной назад, это плохой выбор для хранения больших объемов данных.

  • Защищенные данные, которые еще не отображены в пользовательском интерфейсе. Хотя данные ViewState кодируются и могут быть зашифрованы, ваши данные наиболее безопасны, если они никогда не отправляются клиенту. Таким образом, состояние сеанса - - более безопасный вариант. (Сохранение данных в базе данных еще больше обеспечивается за счет дополнительных учетных данных базы данных. Вы можете добавить SSL для еще лучшую защиту ссылок.) Но если вы указали личные данные в пользовательском интерфейсе, возможно, вы уже удобно с защитой самой ссылки. В этом случае не менее безопасно помещать то же значение в ViewState.

  • Объекты, не легко сериализованные в ViewState, например DataSet. Сериализатор ViewState оптимизирован для небольшого набора общих типов объектов , перечисленных ниже. Другие типы, которые могут быть сериализованы , могут сохраняться в ViewState, но они медленнее и генерируют очень большой размер ViewState размером .

+0

Mr.DiegoS, Какое государственное управление вы бы порекомендовали в случае, если мне нужно сохранить свои данные на уровне страницы и почему? – Null

+0

Это зависит от данных, я бы сказал, что вы должны использовать Session (в большинстве случаев это ответ), но есть случаи, когда вы можете использовать скрытые поля (если количество данных невелико) или даже базу данных. – DiegoS

+0

Данные были бы .. позволяет сказать сетку из 10 столбцов с максимум 50 строк. – Null

 Смежные вопросы

  • Нет связанных вопросов^_^