【问题标题】:GridView Sorting in ASP.NET 2 using C#使用 C# 在 ASP.NET 2 中进行 GridView 排序
【发布时间】:2014-06-28 10:45:31
【问题描述】:

我需要使用 C# 在 ASP.NET 2 中进行 GridView 排序,并尝试了本教程: http://www.dotnetfox.com/articles/gridview-sorting-example-in-Asp-Net-using-C-Sharp-1082.aspx

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

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

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();
        }
    }

【问题讨论】:

  • 您能告诉我在 GridViewBind 函数中声明的“DataSet dset”在哪里吗?如果您在函数中声明它,则您的其他数据集 (DataSet ds = new DataSet()) 为空,这解释了异常。我建议删除 GridViewBind 函数中的声明,并使用“DataSet ds”变量。
  • 应该是 SQL = " SELECT * FROM doTable ";,而不是 SQL = " SELECT * FROM doTable; ";
  • 谢谢我已经编辑了我的第一篇文章;在 EDIT 1 中完整的 code .cs.
  • 删除“DataSet ds = new DataSet();”并在这两个地方使用另一个变量。
  • 非常感谢,正在工作;但对于近距离的问题?

标签: c# asp.net gridview


【解决方案1】:
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];
   }
}

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多