2016-11-22 43 views
1

我想在网格视图中进行排序(ASP.Net 4.5)GridView DataSource总是返回null

代码非常简单。网格视图具有使用简单的查询像SELECT * FROM表

排序事件下面的代码AllowSorting的AutoGenerateColumns设置为真正

网格视图被填充上按一下按钮(代码可能有一些语法错误,因为我只是写它而不是从原始源复制它):

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; 

我试图保存数据表(上填充的GridView当按钮单击事件)的视图状态,然后当我把它上面的排序方法,现在DT不为空,但它仍然是空的,也有在里面0行。

为什么dt为空以及如何进行排序?

编辑按钮点击

代码如下

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

如何和wh你是否设置网格的数据源属性? – Steve

+0

请使用您设置'grid1.DataSource'的代码以及SQL语句更新OP。 – Hank

+0

你可以给你设置数据源的行吗? –

回答

0

提供给数据源转换回一个DataTable,尝试这样的事情。设置GRID1的数据源后,补充一点:

ViewState["mydatasource"] = dtRecord; 

然后,添加到这个排序事件:

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; 
    } 
} 
+0

BindingSource仅在WinForms中可用。 –

+0

尝试更新。 – Hank

+0

我已经做到了这一点,但没有运气。我通过在GridView_Sorting事件中再次调用该SQL语句来解决它。 –