7

我有一个 GridView,我使用 ObjectDataSoure 作为数据源。ObjectDataSource 从 TextBox 和 DropDownList 中获取参数,然后将其传递到存储过程中。还有一个名为 Search 的按钮,可用于通过提供/更改 TextBox 和/或 DropDownList 中的值来强制刷新 GridView。但是我注意到,如果我更改了值,我不必单击“搜索”按钮;只需单击 GridView 即可导致数据绑定。

在仍然使用 ObjectDataSource 的同时有没有办法阻止这个动作?

4

3 回答 3

6

当您在 GridView 上分配 DataSourceID 时,网格将自动绑定到 ObjectDataSource。您可以简单地省略 GridView 上的该属性,然后等到搜索按钮的单击事件来分配它。

于 2012-08-09T04:21:29.127 回答
3

问题是每次用于 ObjectDataSource 的任何参数发生更改时,ODS 都会执行“DataBind”。

您可以使用两个 HiddenFields 来保留这些值。当您更改 HiddenFields 上的值时,ObjectDataSource 只会执行“DataBind”。因此,您可以更改 TextBox 和 DropDownList 上的值,当您需要“DataBind”时,您只需将值复制到 HiddenFields。

这是我为另一个问题制作的代码示例:Q11874496WebApp.7z

于 2012-08-09T04:30:32.077 回答
1

In my case i just used a private boolean field in codebehind and respect its values on datasourceName_Selecting event.

For example i declared the following:

private bool IsInSearchingMode = false; 

set it true only in search mode:

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

and then check the value on Selecting event:

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

// e.result = select code 
}

A drawback is that a new page_load that is not caused by btnSearch_Click will reset the private variable's value. If you want it to be persistent you should use a hidden field as proposed or save it to viewstate.

于 2014-02-21T12:50:55.287 回答