2013-08-28 2 views
0

Я хочу сохранить ArrayList значение в ViewStateC# - Как сохранить ArrayList в ViewState?

Но я получаю сообщение об ошибке:

"Type 'System.Data.DataRow' in Assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable" 

Код:

private void bindGridView() 
    { 
     DbConnection.Open(); 
     OleDbCommand DbCommand = new OleDbCommand("select emp_id,emp_name,father_name,gender,designation,department,location from emp_master", DbConnection); 
     OleDbDataAdapter Dbreader1 = new OleDbDataAdapter(DbCommand); 
     DataSet dsemer = new DataSet(); 

     Dbreader1.Fill(dsemer); 
     ArrayList arrList = new ArrayList(); 
     foreach (DataRow dtRow in dsemer.Tables[0].Rows) 
     { 
      arrList.Add(dtRow); 
     } 
     //Here getting an error 
     ViewState["ds"] = arrList; 
     EmpMasterGrid.DataSource = dsemer; 
     EmpMasterGrid.DataBind(); 

     DbConnection.Close(); 
    } 

Почему мне нужно хранить ArrayList в ViewState?

С помощью этого ViewState я экспортировать выбранный столбец GridView, чтобы преуспеть, используя приведенный ниже код

private void GetCheckBoxStates() 
    { 
     CheckBox chkCol0 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol0"); 
     CheckBox chkCol1 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol1"); 
     CheckBox chkCol2 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol2"); 
     CheckBox chkCol3 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol3"); 
     CheckBox chkCol4 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol4"); 
     CheckBox chkCol5 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol5"); 
     CheckBox chkCol6 = (CheckBox)EmpMasterGrid.HeaderRow.Cells[0] 
           .FindControl("chkCol6"); 
     ArrayList arr; 

     if (ViewState["ds"] == null) 
     { 
      arr = new ArrayList(); 
     } 
     else 
     { 
      arr = (ArrayList)ViewState["ds"]; 
     } 
     arr.Add(chkCol0.Checked); 
     arr.Add(chkCol1.Checked); 
     arr.Add(chkCol2.Checked); 
     arr.Add(chkCol3.Checked); 
     arr.Add(chkCol4.Checked); 
     arr.Add(chkCol5.Checked); 
     arr.Add(chkCol6.Checked); 
     ViewState["ds"] = arr; 
    } 

Любые идеи? Заранее спасибо. Отредактировано!

ответ

0

Как ошибка sais System.Data.DataRow не является сериализуемым, поэтому вы не можете сохранить его в ViewState.

Я предлагаю вам создать пользовательский класс, который помечен как Serializable, который содержит все необходимые значения и сохраняет ArrayList этих объектов в ViewState. Вы заполняете эти объекты в своем цикле foreach данными от DataRow.

Пример:

Объект данных

[Serializable] 
public class Employee 
{ 
    public int emp_id, 
    public string emp_name, 
    //other properties 
} 

в методе bindGridView

//other code 
ArrayList arrList = new ArrayList(); 
foreach (DataRow dtRow in dsemer.Tables[0].Rows) 
{ 
    arrList.Add(new Employee 
    { 
     emp_id = dtRow[0], 
     emp_name = dtRow[1], 
     //other properties 
    }; 
} 
ViewState["ds"] = arrList; 
+0

Спасибо за ваши усилия, бушель еще я получаю ошибку – user2500094

+0

Как добавить набор данных значения вместо этого arraylist в строке ниже arr.Add (chkCol0.Checked); – user2500094

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