【发布时间】:2015-04-19 06:49:38
【问题描述】:
我有一个 asp.net GridView,它使用 ObjectDataSource 来获取数据。 GridView 位于 UpdatePanel 内部。我想过滤点击不同链接按钮的数据。为此,我为每个 LinkButton 编写了新的 SelectMethod 和 SelectCountMethod,并在单击 LinkButton 时将这些方法设置为 ObjectDataSource。设置这两种方法后,我调用GridView.DataBind() 方法。所有SelectMethod的返回类型都是DataSet。
我已经调试了从数据库中获取数据的代码,但 gridview 没有更新。当点击 LinkButtons 时,GridView_DataBound 事件也没有命中。以下是我尝试过但不起作用的事情:
- 设置链接按钮
CausesValidation="True"。 - 设置更新面板
UpdateMode="Always"。 - 使用
SelectMethod和SelectCountMethod创建了ObjectDataSources 对于每个 LinkButton 并设置GridView.DataSource以单击 链接按钮。 - 还尝试在单击链接按钮时设置
FilterExpression和FilterParameters。这确实会触发ObjectDataSource1_Filtering事件并且传递了正确的参数。
带有 UpdatePanel 的 GridView
<asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:GridView ID="GridView" runat="server"
AllowPaging="True" AllowSorting="True" CssClass="grdViewHeaderDivider"
AutoGenerateColumns="True"
OnSorting="GridView_Sorting"
OnDataBound="GridView_DataBound"
OnPageIndexChanging="GridView_PageIndexChanging"
GridLines="None"
DataSourceID="ObjectDataSource1">
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="GridView" EventName="Sorting" />
<asp:AsyncPostBackTrigger ControlID="GridView" EventName="PageIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="GridView" EventName="DataBound" />
<asp:AsyncPostBackTrigger ControlID="lblTotalUploaded" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="lblUploadedNS" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="lblUploadedSA" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
对象数据源
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OnFiltering="ObjectDataSource1_Filtering" SelectCountMethod="GetApplicationsCount" SelectMethod="GetApplications" TypeName="TestApp.Applications" SortParameterName="sortExpression" EnableCaching="false" EnablePaging="True" >
<SelectParameters>
</SelectParameters>
</asp:ObjectDataSource>
链接按钮点击
protected void lblTotalUploaded_Click(object sender, EventArgs e)
{
var btn = (LinkButton)sender;
//ObjectDataSource1.FilterExpression = "ApplicationName='{0}'";
switch (btn.CommandName)
{
case "lblTotalUploaded":
ObjectDataSource1.SelectMethod = "GetApplications";
ObjectDataSource1.SelectCountMethod = "GetApplicationsCount";
break;
case "lblUploadedSA":
ObjectDataSource1.SelectMethod = "GetScore";
ObjectDataSource1.SelectCountMethod = "GetScoreCount";
//ObjectDataSource1.FilterParameters.Add("ApplicationName", "Candy Crush");
break;
case "lblUploadedNS":
ObjectDataSource1.SelectMethod = "GetNoScore";
ObjectDataSource1.SelectCountMethod = "GetNoScoreCount";
//ObjectDataSource1.FilterParameters.Add("ApplicationName", "Clash of Clans");
break;
}
ObjectDataSource1.Select();
GridView.DataBind();
}
【问题讨论】:
标签: c# asp.net gridview objectdatasource