C# 是否可以停止ObjectDataSource的自动绑定?

C# 是否可以停止ObjectDataSource的自动绑定?,c#,asp.net,gridview,objectdatasource,C#,Asp.net,Gridview,Objectdatasource,我有一个GridView,使用ObjectDataSoure作为数据源。ObjectDataSource从TextBox和DropDownList中获取参数,然后将其传递到存储过程中。还有一个名为“搜索”的按钮,可以通过在文本框和/或下拉列表中提供/更改值来强制刷新GridView。然而,我注意到,如果我改变了值,我不必点击搜索按钮;只需单击GridView即可导致数据绑定 在仍然使用ObjectDataSource的情况下,是否有任何方法可以阻止此操作?在GridView上分配数据源ID时,网

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


在仍然使用ObjectDataSource的情况下,是否有任何方法可以阻止此操作?

在GridView上分配数据源ID时,网格将自动绑定到ObjectDataSource。您只需在GridView上忽略该属性,然后等待搜索按钮的click事件来分配它。

问题在于每次更改ObjectDataSource使用的任何参数时,ODS都会执行“数据绑定”

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


下面是我为另一个示例编写的代码:

在我的示例中,我只是在codebehind中使用了一个私有布尔字段,并在datasourceName\u选择事件中尊重它的值

例如,我声明如下:

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 
}
protectedvoid myLinqDataSource\u选择(对象发送方,LinqDataSourceSelectEventArgs e)
{
e、 结果=新列表();
如果(!this.IsInSearchingMode)
返回;
//e.result=选择代码
}

缺点是,非btnSearch\u单击导致的新页面加载将重置私有变量的值。如果希望持久化,则应使用建议的隐藏字段或将其保存到viewstate

请显示您的代码。我认为您的一个控件具有auto postback true。@ShoaibMuhammadKhan ObjectDataSource和GridView控件都没有AutoPostback属性。TextBox和DropDownList的AutoPostback设置为false。可能重复:但是如何在gridview上单击自动页面回发?@derek hunziker您的意思是从aspx中删除gridview的DataSourceID属性并从后面的代码中设置它吗?没错,将其从aspx页面中删除,并等待单击事件将其分配到codebehind中。这将有助于查看GridView定义以及数据源。你能发布一些代码吗?@derek hunziker这种方法的问题是我也需要在页面加载时绑定GridView。如果我将DataSourceID设置为page load(即!page.IsPostback),我仍然面临同样的问题。我还尝试设置DataSource属性,而不是DataSourceID,然后手动绑定它,但我也必须在分页中手动编写代码,这与使用ObjectDataSource控件的目的背道而驰。至于发布代码,我将看看我能做些什么,因为这违反了法规感谢@Hailton的建议。我觉得有点不愿意再使用隐藏字段了,因为我已经用了很多了。然而,如果情况变得更糟,我可能会使用这个,毕竟人们可能会争论额外的两个隐藏字段会产生多大的不同。。。正确的?