我想在 ViewState 中存储 ArrayList 值
但我收到一个错误:
"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 列导出到 excel
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;
}
有任何想法吗?提前致谢。 已编辑!