我正在尝试在网格视图中进行排序(ASP.Net 4.5)
代码非常简单。网格视图将 AllowSorting 和 AutoGenerateColumns 设置为 true
使用简单查询(例如 SELECT * FROM TABLE
)在按钮点击时填充网格视图排序事件有以下代码(代码可能有一些语法错误,因为我刚刚编写它而不是从原始源复制它):
protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = grid1.DataSource as DataTable;
if(dt != null)
{
//do some sorting
}
}
问题是 dt 始终为空。我尝试使用以下但同样的问题。
DataTable dt = (DataTable)grid1.DataSource;
我尝试在viewstate中保存数据表(在填充gridview时按钮点击事件),然后当我在上面的排序方法中调用它时,现在dt不为null但它保持为空并且其中有0行。
为什么dt为null以及如何进行排序?
修改
按钮点击代码如下:
SqlConnection con = new SqlConnection(strConnection);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = con;
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Select * from titles";
SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);
DataTable dtRecord = new DataTable();
sqlDataAdap.Fill(dtRecord);
grid1.DataSource = dtRecord;
ViewState["grid1"] = dtRecord;
grid1.DataBind();
答案 0 :(得分:0)
要将DataSource转换回DataTable,请尝试这样的操作。设置grid1的DataSource后,添加:
ViewState["mydatasource"] = dtRecord;
然后,将其添加到Sort事件中:
DataTable dt = ViewState["griddatasource"] as DataTable;
对于排序,尝试类似:
DataView dv = dt.DefaultView;
dv.Sort = "col1 desc";
DataTable sortedDT = dv.ToTable();
最终代码如下:
protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = ViewState["griddatasource"] as DataTable;
if(dt != null)
{
DataView dv = dt.DefaultView;
dv.Sort = "col1 desc";
DataTable sortedDT = dv.ToTable();
grid1.DataSource = dortedDT;
}
}