首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

为什么 DataTable 不能在页面中共享解决思路

2012-04-23 
为什么 DataTable 不能在页面中共享DataTable idtprotected void Page_Load(object sender, EventArgs e)

为什么 DataTable 不能在页面中共享

  DataTable idt;
  protected void Page_Load(object sender, EventArgs e)
  {
  if (!Page.IsPostBack)
  {
  //求得下拉框的参数
  Maticsoft.BLL.Hpm bll = new Maticsoft.BLL.Hpm();
  idt = bll.GetAllList().Tables[0];
  //部门
  DataView dv1 = new DataView(idt);
  dv1.RowFilter = ("parentcode='10'");
  txtha03.DataSource = dv1;
  txtha03.DataTextField = "cinvcname";
  txtha03.DataValueField = "no";
  txtha03.DataBind();  
  }
  }
  protected void txtha03_SelectedIndexChanged(object sender, EventArgs e)
  {
  //班组车间
  DataView dv2 = new DataView(idt);
  dv2.RowFilter = ("parentcode='" + txtha03.SelectedValue.ToString() + "'");
  txtha04.DataSource = dv2;
  txtha04.DataTextField = "cinvcname";
  txtha04.DataValueField = "no";
  txtha04.DataBind();
  }
以上是我的代码,DataTable idt, 在击发 txtha03_SelectedIndexChanged事件的时候,txtha04 无法获得数据源,我在即时窗体中测 idt,居然是null(如下提示), 好奇怪的事情,但是txtha03依然存在下拉数据.
idt.Rows.Count
“((ASP.hpsn_hpsna_aspx)this).idt”为 null

[解决办法]
当你刷新页面的时候idt也就不存在了
去掉这个判断if (!Page.IsPostBack)
保证每次加载时都能执行
[解决办法]
每次poskback的时候,页面类都会被重新构造。
idt在新构造的类里面没有被赋值,因此是Null

可以!Page.IsPostBack外面给idt赋值。
或者将idt保存在viewstate中。
[解决办法]
页面间利用ViewState保存DataTable数据

DataTable idt;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//求得下拉框的参数
Maticsoft.BLL.Hpm bll = new Maticsoft.BLL.Hpm();
idt = bll.GetAllList().Tables[0];
ViewState["dt"] = idt;
//部门
DataView dv1 = new DataView(idt);
dv1.RowFilter = ("parentcode='10'");
txtha03.DataSource = dv1; 
txtha03.DataTextField = "cinvcname";
txtha03.DataValueField = "no";
txtha03.DataBind();
}
}
protected void txtha03_SelectedIndexChanged(object sender, EventArgs e)
{
//班组车间
DataView dv2 = new DataView((DataTable)ViewState["dt"]);
dv2.RowFilter = ("parentcode='" + txtha03.SelectedValue.ToString() + "'");
txtha04.DataSource = dv2;
txtha04.DataTextField = "cinvcname";
txtha04.DataValueField = "no";
txtha04.DataBind();
}

热点排行