是否可以阻止ObjectDataSource自动绑定?

时间:2012-08-09 04:12:13

标签: c# asp.net gridview objectdatasource

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

是否仍然在使用ObjectDataSource时阻止此操作?

3 个答案:

答案 0 :(得分:6)

在GridView上分配DataSourceID时,网格将自动绑定到ObjectDataSource。您可以在GridView上省略该属性,并等到“搜索”按钮的单击事件进行分配。

答案 1 :(得分:3)

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

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

以下是我为另一个questionQ11874496WebApp.7z

制作的代码示例

答案 2 :(得分:1)

在我的情况下,我只是在代码隐藏中使用了一个私有布尔字段,并在datasourceName_Selecting事件上尊重它的值。

例如我声明了以下内容:

private bool IsInSearchingMode = false; 

仅在搜索模式下设置为true:

    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将重置私有变量的值。如果您希望它是持久的,您应该使用建议的隐藏字段或将其保存到viewstate。