分页可以实现编辑和更新,只要进行了搜索后再点编辑,要更新的条目就回到全部数据的位置了。这个怎么办好几天解决不了了,期待各位的帮忙前台页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>GridView测试</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="搜索" OnClick="Button1_Click" /><br />
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
            BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px"
            CellPadding="3" GridLines="Horizontal"
            Width="649px">
            <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
                    SortExpression="id" />
                <asp:BoundField DataField="username" HeaderText="username" SortExpression="username" />
                <asp:BoundField DataField="tel" HeaderText="tel" SortExpression="tel" />
            </Columns>
            <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
            <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
            <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
            <AlternatingRowStyle BackColor="#F7F7F7" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
            DeleteCommand="DELETE FROM [Test_1] WHERE [id] = @id" InsertCommand="INSERT INTO [Test_1] ([username], [tel]) VALUES (@username, @tel)"
            SelectCommand="SELECT * FROM [Test_1]" UpdateCommand="UPDATE [Test_1] SET [username] = @username, [tel] = @tel WHERE [id] = @id">
            <DeleteParameters>
                <asp:Parameter Name="id" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="username" Type="String" />
                <asp:Parameter Name="tel" Type="String" />
                <asp:Parameter Name="id" Type="Int32" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="username" Type="String" />
                <asp:Parameter Name="tel" Type="String" />
            </InsertParameters>
        </asp:SqlDataSource>
    
    </div>
    </form>
</body>
</html>后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class GridView : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridViewDataBind();
        }
    }
    private void GridViewDataBind() 
    {
        GridView1.DataSourceID = "SqlDataSource1";
        GridView1.DataKeyNames = new string[] { "id" };
        GridView1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        String username = TextBox1.Text;
        SqlDataSource1.SelectCommand = "select * FROM [Test_1] where username='" + username +"'";
        GridViewDataBind();
    }
}

解决方案 »

  1.   

    哦,那我就要像以前的DataGrid控件似的,手写全部方法,比如说分页,控件的DataBind和编辑方法?
      

  2.   

        private void GridViewDataBind()
        {
            String username = TextBox1.Text;
            if(username=="")
           {
            SqlDataSource1.SelectCommand = "select * FROM [Test_1] "; 
            }
            else
            {
           SqlDataSource1.SelectCommand = "select * FROM [Test_1] where username='" + username +"'"; 
            }
            GridView1.DataSourceID = "SqlDataSource1";
            GridView1.DataKeyNames = new string[] { "id" };
            GridView1.DataBind();
        } 
        protected void Button1_Click(object sender, EventArgs e)
        {
            GridViewDataBind();
        } 
    编辑之后再GridViewDataBind();
      

  3.   

    编辑之后再GridViewDataBind();能有相应的手写编辑代码看看吗?
      

  4.   

    编辑之后再GridViewDataBind();我是在GridView_RowUpdating方法里面写吗?
      

  5.   

    其实,只要看到这种问题,你看代码吧,几乎都是写这
            if (!Page.IsPostBack) 
            { 
                GridViewDataBind(); 
            } 
    这样的地方。放在前几年我会去探讨这种问题形成的原因,现在我觉得为什么你要手工编写那么多代码呢,为什么不使用数据源控件将你的手工编写的代码全部删除呢?你应该把精力放在更复杂的设计方面,尽量少重复开发内置控件已经提供好的代码。实际上,使用asp.net2.0的数据绑定程序开发的写法,不可能见到这个代码。而且还有一个很大的区别,你的代码每当回发时都会去读数据库重新绑定控件,例如你在页面上放一个Button点击它回发时也会去重新绑定,而真正的数据源控件根本不会去读取数据库(在读取数据库的方法的入口设置断点跟踪一下就可以看到)。实际上回发时如果没有修改数据绑定控件本身,它就应该自动恢复上一个页面输出时的控件结构(而不是读取数据库重新形成可能不一样控件结构);即使当提交的数据触发数据绑定控件必须刷新,也是在页面的PreRender事件阶段才访问数据库,也就是说如果有GridViewDataBind()这个代码那么应该总是在页面PreRender中调用而不是在Load事件中调用。网上、以及许多国产的介绍asp.net2.0的入门书上的许多代码是抄袭过去的asp.net1.1的写法的,而且流程还有bug。
      

  6.   

    这是Scott Mitchell的一个稍微“复杂”的分页例子:http://blog.csdn.net/heker2007/archive/2007/03/27/1542174.aspx你可以看到,再复杂的程序,那些人家已经写好的代码你一行也不用自己重新写出来。
      

  7.   

    SqlDataSource对查询出的数据源失效。