注意:
1.是在WinForm,不是ASP.NET
2.DataGrid是在可编辑情况下分页
网上看了很多相关程序,基本上DataGrid都是不可编辑的,翻页后数据清空或不是同一个表,微软网站的例子中DataGrid也是只读的,各位大侠,帮帮忙啊!最好给个例子啊,谢谢了!

解决方案 »

  1.   

    可编辑分页??
    可编辑与分页没有关系。
    分页时保存即可
    http://support.microsoft.com/kb/307710/zh-cn
      

  2.   

    看过以前csdn的帖子,没有好的解决方法.
    http://topic.csdn.net/t/20050418/09/3944832.html
      

  3.   

    下面的代码可以满足你的要求。已经测试过 在vs2003中。datagrid显示数据库中的内容,每页5条,翻页后仍可以显示,其中数据库连接的地方,和SQL查询语句自己改一下public int NowPage = 1, PageCount = 1,PageSize = 5;
    public string AddSql= "";
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void findbtn_Click(object sender,System.EventArgs e)
    {
        string FindStr = findstr.Text ;
        if(FindStr != "")
        {
    AddSql= "WHERE UserName = '"+FindStr+"'" ;
        }
        else
        {
             MessageBox.Show("请输入查询的名字");
        }
        NowPage= 1;
        PageCount = 1;
        LoadData(sender,e);
    }
    /// <summary>
    /// 上下页按钮
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void p_btn_Click(object sender, System.EventArgs e)
    {
        NowPage--;
        LoadData(sender,e);
    }
    private void n_btn_Click(object sender, System.EventArgs e)
    {
        NowPage++;
        LoadData(sender,e);
    }
    /// <summary>
    /// 登陆数据
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void LoadData(object sender,System.EventArgs e)
    {
        try
        {
             string Afile = "server=(local);user id=sa;password=;database=woker";
             //设置数据库连接
             SqlConnection SconnStr = new SqlConnection (Afile);
    if(SconnStr.State.ToString()=="Closed")
    {
    SconnStr.Open ();
    }

    SqlCommand Countcmd = new SqlCommand ("select count(*) as co from TABLE2",SconnStr);
    SqlDataReader Countdr = Countcmd.ExecuteReader();

    if(Countdr.Read())
    {
              PageCount = Int32.Parse (Countdr["co"].ToString ())/PageSize;
             if(Int32.Parse (Countdr["co"].ToString ())%PageSize>0) 
    {
    PageCount = PageCount +1;
    }
    if(PageCount<1)
    {
    PageCount=1;
    }
    }
    SconnStr.Close ();
    pageinfo.Text ="共"+PageCount+"页\t 第"+NowPage+"页";
    //设置操作数据库命令
             if(NowPage>=PageCount)
    {
    NowPage= PageCount;
    }
    if(NowPage<=1)
    {
    NowPage=1;
    }

    int start = (NowPage-1)*PageSize; string command = "select * from TABLE2 "+AddSql+" order by ID";
    SqlDataAdapter sda = new SqlDataAdapter ( command,SconnStr);
    DataSet ds = new DataSet ();
    sda.Fill(ds,start,PageSize,"search");
    dataGrid1.DataSource = ds.Tables ["search"].DefaultView ;
    dataGrid1.SetDataBinding(ds,"search");
    }
    catch(Exception err)
    {
    MessageBox.Show(err.Message.ToString());
    }
    }
      

  4.   

    主体函数是loaddata() 自己看看就懂  挺简单的
      

  5.   

    TO:anthit() 
    按照你写的,我运行了,在第一页写上数据,翻到下一页,然后又翻到第一页,我在第一页写的数据还是清空了啊?
      

  6.   

    代码:
    private void Form1_Load(object sender, System.EventArgs e)
    {
    string conStr = "Data Source=127.0.0.1;Persist Security Info=true;Initial Catalog =test;user id=sa;password=";
    SqlConnection conn = new SqlConnection (conStr);
    conn.Open();
    int start = (NowPage-1)*PageSize;
    string command = "select distinct text_CN,isnull(text_CnJP,'')text_CnJP from main where item='01' and ltrim(isnull(text_CnJP,''))<>'' order by text_CnJP";
    da = new SqlDataAdapter ( command,conn);
    ds = new DataSet ();
    da.Fill(ds,start,PageSize,"main");
    dataGrid1.DataSource = ds.Tables ["main"].DefaultView ;
    } private void preLink_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
    {
    NowPage--;
    LoadData(sender,e);
    } private void nextLink_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
    {
    NowPage++;
    LoadData(sender,e);
    } private void LoadData(object sender,System.EventArgs e)
    {
    try
    {
    string conStr = "Data Source=127.0.0.1;Persist Security Info=true;Initial Catalog =test;user id=sa;password=";
    SqlConnection conn = new SqlConnection (conStr);
    if(conn.State.ToString()=="Closed")
    {
    conn.Open ();
    }
    SqlCommand cmd = new SqlCommand ("select count(distinct text_CnJP) as co from main where item='01' and ltrim(isnull(text_CnJP,''))<>''",conn);
    SqlDataReader Countdr = cmd.ExecuteReader();

    if(Countdr.Read())
    {
    PageCount = Int32.Parse (Countdr["co"].ToString ())/PageSize;
    if(Int32.Parse (Countdr["co"].ToString ())%PageSize>0) 
    {
    PageCount = PageCount +1;
    }
    if(PageCount<1)
    {
    PageCount=1;
    }
    }
    conn.Close ();
    pageinfo.Text ="共"+PageCount+"页\t 第"+NowPage+"页";
    //设置操作数据库命令
    if(NowPage>=PageCount)
    {
    NowPage= PageCount;
    }
    if(NowPage<=1)
    {
    NowPage=1;
    }

    int start = (NowPage-1)*PageSize; string command = "select distinct text_CN,isnull(text_CnJP,'')text_CnJP from main where item='01' and ltrim(isnull(text_CnJP,''))<>'' order by text_CnJP";
    da = new SqlDataAdapter ( command,conn);
    ds = new DataSet ();
    da.Fill(ds,start,PageSize,"main");
    dataGrid1.DataSource = ds.Tables ["main"].DefaultView ;
    }
    catch(Exception err)
    {
    MessageBox.Show(err.Message.ToString());
    }
    }
    }