楼主说清楚点!
--------------------------------
AspNetPager 免费分页控件4.2版发布,同时发布最新源代码,欢迎下载:http://www.webdiyer.com

解决方案 »

  1.   

    和我遇到的问题差不多,我上次是排序事件无效了,当AutoGenerateColumns = false的时候排序就不行了,设为true时就可以,最后还是没用动态加载,用自动的,绕了个大圈才算实现我的要求:(
      

  2.   

    主要代码如下:
             .cs
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    protected System.Web.UI.WebControls.Button Button1;
    protected Robinson.Data.oleDb db = new oleDb(); private void Page_Load(object sender, System.EventArgs e)
    {
                               //加载动态列
    BoundColumn c = new BoundColumn();
    c.DataField ="goods";
    c.HeaderText ="编号";
    this.DataGrid1.Columns.Add(c);
    } public void OnPageIndexChanged(Object sender, DataGridPageChangedEventArgs e) 
    {
    this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
    this.BindDataGrid();
    }                  //点际查询按扭
    private void Button1_Click(object sender, System.EventArgs e)
    {
    this.BindDataGrid();
    }                  //绑定
    private void BindDataGrid()
    {

    this.DataGrid1.DataSource = db.GetDT("select * from syn_waredict").DefaultView;
    this.DataGrid1.DataBind();
    }
    }         .aspx
             <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 17px; POSITION: absolute; TOP: 46px" runat="server" AutoGenerateColumns="False" OnPageIndexChanged="OnPageIndexChanged" AllowPaging="True">
    <PagerStyle Mode="NumericPages">
    </PagerStyle></asp:DataGrid>
      

  3.   

    但,如果在DataGrid中加一个自动列或者在Load中绑定一下,就能触发OnPageIndexChanged。
    请教谁能解释一下其中的来由啊?
      

  4.   

    you need to recreate those columns upon postback, seeDataGrid Web 伺服器控制項的常見問題
    http://www.microsoft.com/taiwan/msdn/library/2002/Feb-2002/whitepaper/vbtchtopquestionsaboutaspnetdatagridservercontrol.htm
      

  5.   

    感谢思归:我重载LoadViewState,在此加入行的创建。
    但随之有出现一个问题,Columns的信息无法读取,因为LoadViewState是发生在Load之前。请问我该怎么办?代码如下:
    protected override void LoadViewState(object savedState) 
    {
    base.LoadViewState(savedState);

    this.AddColumns();

    }private void AddColumns()
    {
    for(int i=0;i<=_ArrFieldUpperBound;i++)
    {
    BoundColumn c = new BoundColumn();
    c.DataField = ArrFieldInfo[i,0].ToString();
    c.HeaderText =ArrFieldInfo[i,1].ToString();
    c.Visible = (ArrFieldInfo[i,2].ToString() == "1");
    this.DataGrid1.Columns.Add(c);
    }
    }
      

  6.   

    一 在代码中建立DataGrid的Column的注意事项
    1. 要依靠ViewState来维持Datagrid中的内容,则必须在Init事件中建立所有的列,并加入到DataGrid.Colums中去,这样,一旦Datagrid绑定了数据,就能够维持Datagrid的状态,而且也能够保证DataGrid中的事件(比如DataGrid1_ItemDataBound,DataGrid1_PageIndexChanged)得到响应。
    2. 若没有在Init事件中建立列,而是在Page_Load中建立列,则Datagrid 中的内容无法用ViewState来保持,必须每次都要在Page_Load重新绑定数据,这样才能保证DataGrid中的事件(比如DataGrid1_ItemDataBound,DataGrid1_PageIndexChanged)得到响应。
    若是需要在某个按钮点击事件中改变DataGrid中的数据,在事件中重新获取数据,重新绑定
      

  7.   

    感谢Up:我将AddColumns加入Page_init事件中,但Page_Init中我要动态创建的列信息数组变量ArrFieldInfo(此变量从外部传入,我写的是一个窗体控件)为Null,创建还是失败!
      

  8.   

    >>>此变量从外部传入make them available to LoadViewState