繁体   English   中英

填充Gridview

[英]Populating Gridview

我目前正在处理asp.net webforms项目,并且有一个页面

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

我在同一页面上也有一个asp:gridview ,每当我单击linkbutton 而不将数据保存到DataBase时,都需要在其上插入新行。 我用来实现此目的的方法是将数据保存在ViewState列表中。

所以,我的问题是:没有更好的方法吗? 如果是 ,请详细显示。

更新:发生PostBack时,我一定不会丢失gridview数据。

您正在寻找ASP .NET状态管理 ,有几种处理方式。

  • 查看状态
  • 控制状态
  • 隐藏的字段
  • 饼干
  • 查询字串
  • 应用状态
  • 会话状态
  • 配置文件属性

由于您没有提供更多信息,因此我建议您使用会话状态保存数据,因为这是最简单的方法,因为该信息将存储在它所属的服务器端(而不是错误地使用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事件上更新控件不是一个好习惯 ,您应该处理哪种回发来刷新数据并刷新适当方法上的网格(首先加载页面,以及添加/修改/删除行)。

如果您使用的是.NET Framework 4.5或更高版本,我将建议您使用GridView模型绑定(SelectMethod) GridView模型绑定 。因此不必在Page_Load方法中显式地刷新每个回发上的数据源,这是一种更清洁的方法。

编辑:从这里

会话状态还是ViewState?

在某些情况下,在ViewState中保存状态值不是最佳选择。 最常用的替代方法是会话状态,它通常更适合于:

  • 大量数据。 由于ViewState既增加了发送到浏览器的页面(HTML负载)的大小,又增加了发回表单的大小,因此对于存储大量数据而言,这是一个糟糕的选择。

  • 保护尚未在UI中显示的数据。 尽管ViewState数据已编码并且可以选择加密,但是如果您的数据从未发送到客户端,则将是最安全的。 因此,会话状态是一个更安全的选择。 (由于额外的数据库凭据,将数据存储在数据库中更加安全。您可以添加SSL以获得更好的链接安全性。)但是,如果您已经在UI中显示了私有数据,那么大概已经对链接本身的安全性。 在这种情况下,将相同的值也放入ViewState同样安全。

  • 不容易序列化到ViewState的对象,例如DataSet。 ViewState序列化程序针对以下列出的一小部分常见对象类型进行了优化。 其他可序列化的类型可能会保留在ViewState中,但速度较慢并且会产生很大的ViewState占用空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM