1

使用 .net 4 和 c# 我试图从数据库中获取数据到 GridView 并显示返回的行数。我还有一个下拉列表,用作 SqlDataSource 中的 ControlParameters 来过滤结果。

这在初始页面加载时效果很好,但是当我从下拉列表中选择某些内容时,结果会被过滤,但行数不会改变。当我从下拉列表中选择另一个项目时,行数会更新,但数字与前一个值正确。

        <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 完全陌生,所以如果我错过了一些明显的东西,我不会感到惊讶。

4

2 回答 2

1

我认为您的问题是 Page_Load 事件在网格重新绑定到数据之前触发,这就是为什么计数总是落后一个回发。

您可以尝试在以后的 Page 事件中更新计数,例如OnPreRender(object sender, EventArgs e)或更新网格视图上 DataBound 事件中的计数...

将此添加到您的 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(); }

试一试,让我知道其中一个/两个是否有效。

于 2013-01-11T15:46:36.933 回答
-1

这应该会为您解决。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {  
        WOs_count.Text = WO_list.Rows.Count.ToString();
    }
于 2013-01-11T15:27:18.447 回答