我想写一个查询条件的综合控件.
形如下图所示:
条件一;条件二;条件三.........                                             查询目的是这样,最右边是一个查询按钮,单击按钮以后把查询得到的结果作为数据源绑定到DataGrid中.因此目前想到需要传递参数:数据库的表名(指明是查询哪一个表);DataGrid的名称(作为显示数据用);在Web页面引用这个控件以后我是
if(!this.Page.IsPostBack)
{
this.BindGrid();
}而BindGrid过程我是这样写的
private void BindGrid()
{
QueryBar.strTable="cs_yjxgsj";
QueryBar.dgQuery=this.dgUsers;
}
问题就出现了:页面首次打开的时候没问题,但是我单击了查询按钮以后就出问题了,我跟踪了一下发现是找不到我传递的两个参数了,一想也就明白了,因为我是在if(!this.Page.IsPostBack)过程中调用BindGrid过程的,而在BindGrid中才给字段赋的值,这样,单击查询按钮以后,页面刷新,就不会再调用BindGrid过程了,因此就找不到付给的变量值了.敢问大哥们谁有好的办法!!!!!!   另外我试过了ViewState,表名作为string,ViewState还是支持的,但是DataGrid就不行了,提示错误:类型“System.Web.UI.WebControls.DataGrid”必须标记为 Serializable 或者具有 ReferenceConverter 以外的 TypeConverter,才能被放置在视图状态中。
谁有好的想法或者办法,麻烦告诉小弟一声,谢谢拉!
!!!!!!!!!!!!!!!!!!!!!分不够了再加,问题能解决就行!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    页面执行顺序的问题:把你的BindGrid()放到这里面
    private void InitializeComponent()
    {this.Init += new System.EventHandler(this.BindGrid);}
      

  2.   

    你放在这里,跟我把他放在 if(!this.Page.IsPostBack)
    {

    }
    this.BindGrid();
    这样岂不是一样的效果?
    但是我不能把它放在外面
      

  3.   

    首先,你既然知道放在if(!this.Page.IsPostBack)
    {

    }
    中不行为什么还要放在里面?!
    其次,既然有一个查询按钮,你就要在服务器端相应查询事件进行数据库查询。在查询结束后可以获得dataset,然后再将他绑定到datagrid不就行了吗!