【问题标题】:Is it possible to stop ObjectDataSource from auto-binding?是否可以阻止 ObjectDataSource 自动绑定?
【发布时间】:2012-08-09 04:12:13
【问题描述】:

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

在仍然使用 ObjectDataSource 的同时,是否有办法阻止此操作?

【问题讨论】:

标签: c# asp.net gridview objectdatasource


【解决方案1】:

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

【讨论】:

  • 但是如何在gridview点击时自动回发页面?
  • @derek-hunziker 您的意思是从 aspx 中删除 GridView 的 DataSourceID 属性并从代码隐藏中设置它吗?
  • 没错,将其从aspx页面中删除,然后等到您的点击事件在代码隐藏中分配它。这将有助于查看您的 GridView 定义以及您的数据源。可以发一些代码吗?
  • @derek-hunziker 这种方法的问题是我也需要在页面加载时绑定 GridView。如果我在页面加载时设置 DataSourceID(即!Page.IsPostback),我仍然面临同样的问题。我还尝试设置 DataSource 属性,而不是 DataSourceID,然后手动绑定它,但我也必须在分页中手动编写代码,这违背了使用 ObjectDataSource 控件的目的。
  • 至于发布代码,我会看看我能做什么,因为它违反了规定
【解决方案2】:

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

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

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

【讨论】:

  • 感谢@Hailton 的建议。我觉得有点不愿意再使用隐藏字段,因为我已经使用了很多。但是,如果情况变得更糟,我可能会使用它,毕竟人们可能会争论额外的几个隐藏字段会有多大的不同......对吗?
【解决方案3】:

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

例如我声明了以下内容:

private bool IsInSearchingMode = false; 

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

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

然后检查 Selecting 事件的值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2012-05-22
    • 2019-11-23
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多