【问题标题】:how can i persist a child control viewstate on postback如何在回发时保留子控件视图状态
【发布时间】:2012-01-20 16:43:44
【问题描述】:

我在用户控件中有一个 gridview。我在 usercontrol 构造函数中新建了这个定义为类字段的 gridview。在 Page_Init 中,我设置了必要的属性,如 ID、宽度等。我还在同一事件中将网格添加到 usercontrol 的 Control 集合中。我也有一个重定向属性和方法,这里是相关的:

    public void DataBind()
    {
       _grv.DataBind();
    }
    //here is the datasource
    public object DataSource
    {
      get{ return _grv.DataSource; }
      set{ _grv.DataSource = value; }
    }

我在我的网页中这样调用数据绑定成员:

    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
          return;

        DataTable table = new DataTable();
        DataColumn col1 = new DataColumn();
        DataColumn col2 = new DataColumn();
        DataColumn col3 = new DataColumn();
        table.Columns.Add(col1);
        table.Columns.Add(col2);
        table.Columns.Add(col3);
        DataRow row1 = table.NewRow();
        DataRow row2 = table.NewRow();
        DataRow row3 = table.NewRow();
        row1[0] = "row1";
        row1[1] = "value";
        row1[2] = "amount";
        row2[0] = "row2";
        row2[1] = "no value";
        row2[2] = "no amount";
        row3[0] = "row3";
        row3[1] = "values";
        row3[2] = "amounts";
        table.Rows.Add(row1);
        table.Rows.Add(row2);
        table.Rows.Add(row3);
        ucManagement.DataSource = table;
        ucManagement.DataBind();
    }

但在回发时_grv.DataSource 为空。怎么了?

【问题讨论】:

    标签: c# asp.net data-binding gridview


    【解决方案1】:

    一旦 GridView 绑定了数据源(将所有数据从该源复制到控件或用于显示数据的其他任何东西),它就不再需要原始数据源。它不会保留它不需要的重复数据。 Magnus 已经展示了如何根据需要自己保存数据。在只有少量数据的情况下,有时重新生成它也是一种选择。

    我只是想强调,这与将 gridview 包装在用户控件中无关,也与您可能误用它的某种方式无关。这就是它的设计工作方式。

    据我所知,没有属性或设置可以改变这种行为。

    【讨论】:

    • 什么?你读过我的问题吗??你在说什么?我知道网格在第一次绑定后不需要数据源,这正是我的问题所在!它没有保留它!
    • 还有一件事,正如我在 Magnus cmets 中所说,他的解决方案不起作用。
    • @jim 为什么这么敌对?我们正在努力为您提供帮助。顺便说一句,您的评论没有任何意义。您显然了解 GridView 不再需要数据源,但无法理解为什么它不保留它。
    • 好的!那么如果是这样,为什么如果您将网格视图添加到网页,它会保留数据源?例如,在我的代码中,将 ucManagement 替换为在标记中定义的 GridView1,它将保持数据源回发并注意到我们没有将数据源添加到页面视图状态。
    • 我的观点仍然存在。您不会让 GridVeiw 为您存储其数据源。如果 Magnus 的帖子不起作用,并且您在手动存储任何数据源时遇到问题,那么这是一个不同的问题,我们仍然可以帮助您解决,但这仍然是您现在需要解决的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多