【发布时间】: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();”并在这两个地方使用另一个变量。
-
非常感谢,正在工作;但对于近距离的问题?