2013-01-11 117 views
1

使用.NET 4和C#我想从数据库中的数据到GridView和显示的行数返回。我还有一个下拉列表,用作SqlDataSource中的ControlParameters来过滤结果。Rows.Count与下拉列表

这适用于初始页面加载罚款,但是当我从下拉的结果进行过滤的东西,但行数不会改变。当我从下拉菜单中选择另一个项目时,行数会更新,但数字正确的是前一个值。

 <h5> Showing <asp:Label ID="WOs_count" runat="server" Text="Label"></asp:Label> Work Orders.</h5> 

     <asp:DropDownList 
      ID="DropDownList1" 
      runat="server" 
      AutoPostBack="True"> 
      <asp:ListItem Value="%">All requests</asp:ListItem> 
      <asp:ListItem Value="BBTeam">BB Team</asp:ListItem> 
     </asp:DropDownList> 

选择语句:

<asp:SqlDataSource 
    ID="WorkList" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT TASKS.WOID AS wo_id, Tasks.Completed AS 'Completed Date', Tasks.Respons AS 'Technician', FROM Tasks WHERE (Tasks.Completed>=DATEADD(day,-60,GETDATE())OR Tasks.Completed IS NULL) AND (Tasks.Respons LIKE @Respons) "> 
    <SelectParameters> 
     <asp:ControlParameter name="Respons" ControlID="DropDownList1" PropertyName="SelectedValue"/> 
    </SelectParameters> 

</asp:SqlDataSource> 

然后在后面的代码我有这样的:

 protected void Page_Load(object sender, EventArgs e) 
    { 

     WOs_count.Text = WO_list.Rows.Count.ToString(); 
    } 

我完全新的.NET,如果我这样也不会感到惊讶错过了明显的东西

回答

1

我觉得你的问题是,在Page_Load事件被射击前格栅重新绑定到数据,这就是为什么计数总是一个回传后面。

你可以尝试更新计数器在以后的页面事件,如OnPreRender(object sender, EventArgs e)或者在您的网格视图的数据绑定事件更新计数器...

添加到您的ASPX:

<asp:GridView ID="WO_list" runat="server" OnDataBound="WO_list_DataBound" ... /> 

然后添加这对后面的代码(C#):

protected void WO_list_DataBound(EventArgs e){ WOs_count.Text = WO_list.Rows.Count.ToString(); } 

试试这个,让我知道如果任一/两的工作。

+0

感谢马特,但仍然没有运气。第一个不会改变任何东西;第二给我一个错误:“'编译器错误消息:CS1061:‘ASP.bb_systems_counter_aspx’不包含一个定义为‘WO_list_DataBound’和没有扩展方法‘WO_list_DataBound’接受型的第一参数‘ASP.bb_systems_counter_aspx’可以发现(你是否缺少使用指令或程序集引用?)'' – GRegorious13

+0

我明白了。我相信我有一个错字。对不起,但现在已经修好了。事件中的外壳是错误的...所以你试图覆盖OnPreRender和两段代码来绑定该事件? – Matt

+0

你能发布更多的ASPX吗?至少asp:GridView打开服务器标签?另外,当我的编辑显示时,尝试将WO_list_DataBound上的访问修饰符从private更改为protected。 – Matt

-1

这应该为您解决它。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     WOs_count.Text = WO_list.Rows.Count.ToString(); 
    } 
+0

你为什么要把它放在SelectedIndexChanged上? – ChrisBint

+0

是的,我也考虑过了,并且已经尝试过了,但是不,这不能解决。我也尝试在Page.IsPostBack上运行计数,但结果相同。 – GRegorious13