2012-08-09 29 views
7

我有一個GridView,我已經使用ObjectDataSoure作爲數據源。 ObjectDataSource接受來自TextBox和DropDownList的參數,然後傳遞給存儲過程。還有一個名爲Search的按鈕,可以通過在TextBox和/或DropDownList中提供/更改值來強制刷新GridView。但是我注意到,如果我更改了值,我不必點擊搜索按鈕;只需單擊GridView就會導致數據綁定。是否有可能停止ObjectDataSource自動綁定?

無論如何,仍然使用ObjectDataSource來防止此操作?

+0

請顯示您的code.I認爲您有一個自動回發真正的控制。 – SMK 2012-08-09 04:19:36

+0

@ShoaibMuhammadKhan ObjectDataSource和GridView控件都沒有AutoPostback屬性。 TextBox和DropDownList將AutoPostback設置爲false。 – 2012-08-09 04:26:01

+0

可能的重複: http://stackoverflow.com/questions/831208/databind-and-postback http://stackoverflow.com/questions/1262220/is-this-the-only-way-we-canforce -objectdatasource- – SMK 2012-08-09 04:35:46

回答

6

當您在GridView上分配DataSourceID時,網格會自動綁定到ObjectDataSource。您可以簡單地忽略GridView上的該屬性,並等到搜索按鈕的單擊事件分配它。

+0

,但如何自動頁面回發gridview點擊? – SMK 2012-08-09 04:26:07

+0

@ derek-hunziker你的意思是從aspx中刪除GridView的DataSourceID屬性並將其設置爲代碼隱藏? – 2012-08-09 04:56:01

+0

這是正確的,將其從aspx頁面中刪除並等到您的單擊事件在代碼隱藏中分配它。這將有助於查看您的GridView定義以及您的DataSource。你可以發佈一些代碼嗎? – 2012-08-09 05:05:51

3

問題是,每當ObjectDataSource使用的參數發生更改時,ODS都會執行「DataBind」。

您可以使用兩個HiddenField來保存值。當您更改HiddenFields上的值時,ObjectDataSource將僅執行「DataBind」。因此,您可以更改TextBox和DropDownList上的值,並且當您需要「DataBind」時,只需將值複製到HiddenField。

下面是一個代碼示例中,我再question發:Q11874496WebApp.7z

+1

感謝@Hailton您的建議。因爲我已經使用了很多,所以我感覺有點不情願使用隱藏字段。然而,如果糟糕變得更糟,我可能會使用這個,畢竟人們可能會說有多大的區別是一個額外的隱藏領域將使......對嗎? – 2012-08-09 05:24:48

1

在我來說,我只是用一個私人布爾字段中的代碼隱藏和尊重上datasourceName_Selecting事件的值。

例如,我宣佈:

private bool IsInSearchingMode = false; 

組只在搜索模式也是:

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     this.IsInSearchingMode = true; 
     this.gridData.DataBind(); 
    } 

然後檢查選擇事件的價值:

 protected void myLinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
     { 
      e.Result = new List<BranchDataClass>(); 
      if (!this.IsInSearchingMode) 
       return; 

// e.result = select code 
} 

一缺點是不是由btnSearch_Click引起的新的page_load會重置私有變量的值。如果你希望它是持久的,你應該使用建議的隱藏字段或將其保存到視圖狀態。

相關問題