添加一个SqlDataSource,查询语句为:SELECT * FROM Student WHERE id>=@id ,页面上有一个文本框,传人ID的值,点击“查询”按钮执行查询。运行没有问题。但是我点击任何一个Button按钮 SqlDataSource 都会重新查询一次,能不能只用一个按钮绑定到SqlDataSource,点击其他按钮不查询。

解决方案 »

  1.   

    那要看你的绑定事件写在哪里了?
    如果在page_load里面有的话 加个if(!ispostback)括起来 否则你点那个按钮 都会重新来绑定的
      

  2.   

    只要是服务器控件里面的按钮,点击都会PostBack,调用PageLoad
    如果你想点击按钮不触发PageLoad,有两种方法
    一:用IsPostBack属性屏蔽,即:if(!IsPostBack){查询}
    二:改用客户端按钮
      

  3.   

    但是我点击任何一个Button按钮 SqlDataSource 都会重新查询一次,能不能只用一个按钮绑定到SqlDataSource,点击其他按钮不查询。
    ==
    可以,不要设置SqlDataSource的参数,点击按钮设置并做查询
      

  4.   

    <asp:GridView ID="GridView1" runat="server" DataSourceID="sdsProducts" AutoGenerateColumns="False" DataKeyNames="ProductID">  
        <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"
                ReadOnly="True" />
            <asp:BoundField DataField="ProductName" HeaderText="ProductName"/>
        </Columns>
    </asp:GridView> 
    <asp:SqlDataSource ID="sdsProducts" runat="server" ConnectionString="Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True" ProviderName="System.Data.SqlClient" SelectCommand="select top 5 * from products where productid >= @productid" >
        <SelectParameters>
            <asp:Parameter Name="productid" />
        </SelectParameters>
    </asp:SqlDataSource>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />protected void Button1_Click(object sender, EventArgs e)
    {
        sdsProducts.SelectParameters["productid"].DefaultValue = TextBox1.Text;
        sdsProducts.Select(DataSourceSelectArguments.Empty);
    }