2012-03-04 75 views
1

我有以下的在我的代碼兩個控件GridView的排序不火的第一次點擊

的GridView(數據顯示) 的SqlDataSource(我的GridView控件源)

我想改變gridview的,但是當我更改sqldatasource中的sqlcommandstring時,在我的datagrid表的新視圖中,排序不會觸發第一次單擊。請參閱下面的sqlcommandstring更改過程。

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (IsPostBack) 
      { // Restore saved sqlcommand in page refresh, please see below 
       SqlDataSource1.SelectCommand = ViewState["MySQL"].ToString(); 
      } 
     } 
     catch (Exception ex){}    
    } 

    protected void btn_SearchLibrary_Click(object sender, EventArgs e) 
    { 
     SqlDataSource1.SelectCommand = "SELECT * FROM Books WHERE id=1 OR id=2"; 
     ViewState["MySQL"] = "SELECT * FROM Books WHERE id=1 OR id=2"; 
     //Saves sqlcommand in viewstate, to restore it in page refresh. 
    } 

回答

2

我相信你的GridView的DataBinding發生在你的按鈕的Click事件處理程序之前。因此,在數據源本身更改之前,您的網格已經從數據源更新。在Click事件處理程序中更新SelectCommand之後,必須爲網格顯式調用DataBind。另外,順便說一句,它看起來像你的Page_Load中的try-catch只是爲了抑制NullReferenceException,因爲Page_Load也在Click事件處理器之前觸發,所以ViewState["MySQL"]一開始總是爲空。

+0

我試圖理解,但無法讓你清楚,我在click事件處理程序中添加了數據綁定,但它沒有工作, – HOY 2012-03-05 18:19:34

+0

我的答案可能是非基地,所以我想我需要澄清一下:你能通過我的典型用法嗎?是否如下所示:頁面首次加載時網格爲空;用戶點擊SearchLibrary按鈕,網格被填充;用戶點擊列標題對網格進行排序,但是第一次點擊不會處理;所有後續點擊都會處理並正確排序。這是否準確? – 2012-03-05 20:52:20

+0

這是怎麼的過程:頁面首次加載網格有3個元素裏面,(因爲我的SqlDataSource1 - > Sqlcommandstring = SELECT * from books),也是排序正在工作okey,搜索點擊上面後btn_SearchLibrary_Click觸發並且網格現在有2個元素,現在排序不能很好地工作。 (PS:我使用視圖狀態保持命令字符串始終保持不變,因爲如果我不使用它,gridview會每次點擊某物時返回到3個元素的初始狀態) – HOY 2012-03-05 21:06:03

相關問題