GridView DataSource始终返回null

时间:2016-11-22 17:34:52

标签: c# sorting gridview datatable

我正在尝试在网格视图中进行排序(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();

1 个答案:

答案 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;
    }
}