如何在回发时保持子控件viewstate

时间:2012-01-20 16:43:44

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

我在usercontrol里面有一个gridview。我新建了这个gridview,它定义为usercontrol构造函数中的一个类字段。在Page_Init中我设置了必要的属性,如ID,Width等。我还将网格添加到同一事件中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为空。怎么了?

1 个答案:

答案 0 :(得分:1)

一旦GridView绑定dataSource(将该源中的所有数据复制到控件或其他任何用于显示数据的内容),它就不再需要原始的dataSource。它不会保留它不需要的重复数据。如果您愿意,Magnus已经展示了如何自己保留数据。如果只有少量数据,有时可以重新生成数据。

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

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