2016-11-22 193 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語句來解決它。 –