我有一个GridView,我使用ObjectDataSoure作为数据源。 ObjectDataSource从TextBox和DropDownList接收参数,然后将其传递给存储过程。还有一个名为Search的按钮,可以通过提供/更改TextBox和/或DropDownList中的值来强制刷新GridView。但是我注意到如果我更改了值,我就不必单击“搜索”按钮;只需单击GridView就会导致数据绑定。
是否仍然在使用ObjectDataSource时阻止此操作?
答案 0 :(得分:6)
在GridView上分配DataSourceID时,网格将自动绑定到ObjectDataSource。您可以在GridView上省略该属性,并等到“搜索”按钮的单击事件进行分配。
答案 1 :(得分:3)
问题是,每次更改用于ObjectDataSource的任何参数时,ODS都会执行“DataBind”。
您可以使用两个HiddenField来保留值。当您更改HiddenFields上的值时,ObjectDataSource将只执行“DataBind”。因此,您可以更改TextBox和DropDownList上的值,当您需要“DataBind”时,您只需要将值复制到HiddenFields。
以下是我为另一个question:Q11874496WebApp.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。