C# 使用C在ASP.NET 2中进行GridView排序

C# 使用C在ASP.NET 2中进行GridView排序,c#,asp.net,gridview,C#,Asp.net,Gridview,我需要在ASP.NET 2中使用C进行GridView排序,并尝试了本教程: 下面是我在GridView中对列进行排序的代码C net 2,但我遇到了以下错误: Exception Details: System.IndexOutOfRangeException: Cannot find table 0. 在这行为什么 Line 39: GridViewBind(); Line 40: DataTable dt = new DataTable(); Line

我需要在ASP.NET 2中使用C进行GridView排序,并尝试了本教程:

下面是我在GridView中对列进行排序的代码C net 2,但我遇到了以下错误:

Exception Details: System.IndexOutOfRangeException: Cannot find table 0.
在这行为什么

Line 39:         GridViewBind();
Line 40:         DataTable dt = new DataTable();
Line 41:         dt = ds.Tables[0];
Line 42:         {
Line 43:             string SortDir = string.Empty;



DataSet ds = new DataSet();

public SortDirection dir
{
    get
    {
        if (ViewState["dirState"] == null)
        {
            ViewState["dirState"] = SortDirection.Ascending;
        }
        return (SortDirection)ViewState["dirState"];
    } 
    set
    {
        ViewState["dirState"] = value;
    }

}

protected void gvEmployee_Sorting(object sender, GridViewSortEventArgs e)
{
    GridViewBind();
    DataTable dt = new DataTable();
    dt = ds.Tables[0];
    {
        string SortDir = string.Empty;
        if (dir == SortDirection.Ascending)
        {
            dir = SortDirection.Descending;
            SortDir = "Desc";
        }
        else
        {
            dir = SortDirection.Ascending;
            SortDir = "Asc";
        }
        DataView sortedView = new DataView(dt);
        sortedView.Sort = e.SortExpression + " " + SortDir;
        GridView1.DataSource = sortedView;
        GridView1.DataBind();
    }
}



public void GridViewBind()
{
    SQL = " SELECT * FROM doTable; ";

    try
    {
        conn.Open();

        dadapter = new OdbcDataAdapter(SQL, conn);
        dset = new DataSet();
        dset.Clear();
        dadapter.Fill(dset);
        GridView1.DataSource = dset.Tables[0];
        GridView1.DataBind();
    }
    catch (Exception ee)
    {
        throw ee;
    }
    finally
    {
        conn.Close();
        conn.Dispose();
    }
}
编辑1


您能告诉我GridViewBind函数中声明的DataSet数据集在哪里吗?如果您在函数中声明了它,那么您的另一个dataset ds=new dataset为空,这就解释了异常。我建议删除GridViewBind函数中的声明,并使用DataSet ds变量。它应该是SQL=SELECT*FROM doTable;,非SQL=从doTable中选择*;谢谢你,我编辑了我的第一篇文章;在编辑1中,完整的代码.cs.删除数据集ds=新数据集;在这两个地方都使用另一个变量。非常感谢,现在正在工作;但有一个很近的问题吗?
using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Av_Default : System.Web.UI.Page
{

    OdbcConnection conn =
        new OdbcConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString);

    string SQL;
    OdbcDataAdapter dadapter;
    DataSet dset;
    DataTable dt = new DataTable();
    DataSet ds = new DataSet();

    public SortDirection dir
    {
        get
        {
            if (ViewState["dirState"] == null)
            {
                ViewState["dirState"] = SortDirection.Ascending;
            }
            return (SortDirection)ViewState["dirState"];
        } 
        set
        {
            ViewState["dirState"] = value;
        }
    }

    protected void gvEmployee_Sorting(object sender, GridViewSortEventArgs e)
    {
        GridViewBind();
        DataTable dt = new DataTable();
        dt = ds.Tables[0];
        {
            string SortDir = string.Empty;
            if (dir == SortDirection.Ascending)
            {
                dir = SortDirection.Descending;
                SortDir = "Desc";
            }
            else
            {
                dir = SortDirection.Ascending;
                SortDir = "Asc";
            }
            DataView sortedView = new DataView(dt);
            sortedView.Sort = e.SortExpression + " " + SortDir;
            GridView1.DataSource = sortedView;
            GridView1.DataBind();
        }
    }


    public void GridViewBind()
    {
        SQL = " SELECT * FROM doTAble; ";

        try
        {
            conn.Open();

            dadapter = new OdbcDataAdapter(SQL, conn);
            dset = new DataSet();
            dset.Clear();
            dadapter.Fill(dset);
            GridView1.DataSource = dset.Tables[0];
            GridView1.DataBind();
        }
        catch (Exception ee)
        {
            throw ee;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }
protected void gvEmployee_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dt = GetRows();
    {
        string SortDir = string.Empty;
        if (dir == SortDirection.Ascending)
        {
            dir = SortDirection.Descending;
            SortDir = "Desc";
        }
        else
        {
            dir = SortDirection.Ascending;
            SortDir = "Asc";
        }
        DataView sortedView = new DataView(dt);
        sortedView.Sort = e.SortExpression + " " + SortDir;
        GridView1.DataSource = sortedView;
        GridView1.DataBind();
    }
}

 public void GridViewBind(DataTable dt){
     GridView1.DataSource=dt;
     GridView1.DataBind();
 }

 public DataTable GetRows()
{
    var SQL = " SELECT * FROM doTAble; ";
    //You should use the "using" resource acquisition statement
    // http://www.dotnetperls.com/sqlconnection
    using(var conn=new OdbcConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString))
    {
        conn.Open();
        var dadapter = new OdbcDataAdapter(SQL, conn);
        var dset = new DataSet();
        dadapter.Fill(dset);
        return dset.Tables[0];
   }
}