用ObjectDataSource给gridview填充,当前一打开页面执行查询操作,由于没有传查询条件,所以速度影响很大。
需要:每次打开页面时,对gridview直接绑定null即可,而不需要去绑定Query中的数据集,该如何写?
目前为
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="Query"
                    SelectCountMethod="Count" SortParameterName="orderClause" TypeName="AA.A.aa"
                    EnablePaging="true">protected void btnQuery_Click(object sender, EventArgs e)
{
}

解决方案 »

  1.   

    ObjectDataSource有没什么属性控制是否执行绑定或者什么的?
      

  2.   


    我在<asp:ControlParameter ControlID="ddl_contract_type" Name="contract_type" PropertyName="Text" DefaultValue="-1" />
    默认传了-1,即contract_type=-1是查不到数据的,那么当点击查询要查数据时,这个-1还会带到查询条件中去,这样不行吧?
      

  3.   

    看看这个 ,应该有用 http://www.cftea.com/c/2008/08/1DGFP508ZKCR51A5.asp
      

  4.   

    查询条件有N个,打开页面时传入1=2,查不到任何值,当点击查询时,要根据查询条件查了,但是1=2还是存在。(1=2是查询条件A,改变的是查询条件B)
      

  5.   

    我猜你是直接在页面上写的 GridView 属性DataSourceID="ObjectDataSource1"把它去掉,在 IsPostBack 时指定即可。是 IsPostBack 不是 !IsPostBack   
      

  6.   


    这样在刚进入页面时就不执行了。正确。
    那么在我用查询条件时,有联动下拉框的查询条件,例如选择省份,则联动下拉框中显示该省份下的城市,当执行protected void ddl_contract_type_SelectedIndexChanged(object sender, EventArgs e)时,就会执行到IsPostBack中了,这个时候又去交互数据库了,能用什么办法避免
      

  7.   

    那你就在准备查询的时候 设置 DataSourceID="ObjectDataSource1"eg:protected void btnQuery_Click(object sender, EventArgs e)
    {
          gridViewID.DataSourceID="ObjectDataSource1";
      

  8.   


    <label>
                               省</label>
                            <asp:DropDownList runat="server" ID="ddl_contract_type" AutoPostBack="true" OnSelectedIndexChanged="ddl_contract_type_SelectedIndexChanged">
                            </asp:DropDownList>
    <label>
                                城市</label>
                            <asp:DropDownList runat="server" ID="ddl_contract_sub_type">
                            </asp:DropDownList>当选择了“省”的下拉框而不点击查询按钮时,还是会直接查出结果,导致等待时间长。要不让他查询出结果,怎解?
      

  9.   

    你的DropDownList 和 ObjectDataSource1 有关联么?你现在是怎么写的
      

  10.   


    下拉框事件如下
    protected void ddl_contract_type_SelectedIndexChanged(object sender, EventArgs e)
            {
                CMSContractTypeBLL _contractType = new CMSContractTypeBLL();
                PageUtil.BuildDropDownList(ddl_contract_sub_type, _contractType.GetContractSubType(ConvertUtil.ToInt32(ddl_contract_type.SelectedValue)), "type_sub_desc", "type_sub_id", null);
                ddl_contract_sub_type.Items.Insert(0, new ListItem("全部", ""));
            }
    和 ObjectDataSource1 没有关联的
      

  11.   

    我是想看看 你Page_Load 里怎么写的
      

  12.   


    page_load里没写,写在查询事件里了
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                }
            }protected void btnQuery_Click(object sender, EventArgs e)
            {
                WebGridView1.DataSourceID = "ObjectDataSource1";
                WebGridView1.DataBind();
            }
      

  13.   

    .aspx<p>
        <asp:DropDownList ID="ddlOne" AutoPostBack="true" runat="server" 
                onselectedindexchanged="ddlOne_SelectedIndexChanged">
            <asp:ListItem Text="1" Value="1"></asp:ListItem>
            <asp:ListItem Text="2" Value="2"></asp:ListItem>
            <asp:ListItem Text="3" Value="3"></asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="ddlTwo" runat="server"></asp:DropDownList>
        <asp:Button ID="btnQuery" runat="server" Text="查询" onclick="btnQuery_Click" />
        <asp:GridView ID="gv" runat="server"></asp:GridView>
        <asp:ObjectDataSource ID="ods" runat="server" SelectMethod="AllPeoples" TypeName="WebApplication1._Default"></asp:ObjectDataSource>
        
        </p>
    .cs
    namespace WebApplication1
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {        }
            public  static IList<People> AllPeoples()
            {
                return new List<People> { 
                                            new People { Name = "A", Age = 22 },
                                            new People { Name = "B", Age = 21 }, 
                                            new People { Name = "C", Age = 23 }, 
                                            new People { Name = "D", Age = 22 },
                                            new People { Name = "E", Age = 24 } 
                                        };
            }        protected void btnQuery_Click(object sender, EventArgs e)
            {
                gv.DataSourceID = "ods";
            }        protected void ddlOne_SelectedIndexChanged(object sender, EventArgs e)
            {
                switch (ddlOne.SelectedValue)
                { 
                    case "1":
                        ddlTwo.Items.Add(new ListItem("4", "4"));
                        ddlTwo.Items.Add(new ListItem("5", "5"));
                        break;                case "2":
                        ddlTwo.Items.Add(new ListItem("6", "6"));
                        break;                case "3":
                        ddlTwo.Items.Add(new ListItem("7", "7"));
                        ddlTwo.Items.Add(new ListItem("8", "8"));
                        break;
                }
            }
        }    public class People
        {
            public String Name { set; get; }
            public Int32 Age { set; get; }
        }
    }
      

  14.   

    ObjectDataSource中的方法是也在中间层的,没有写在当前页面,还可以按以上写法?