使用.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>
Select语句:
<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完全不熟悉,如果我错过一些明显的东西,也不会感到惊讶。
答案 0 :(得分:1)
我认为您的问题是在网格重新绑定到数据之前,Page_Load事件正在触发,这就是为什么计数始终是一个回发的原因。
您可以尝试更新稍后的Page事件中的计数,例如OnPreRender(object sender, EventArgs e)
或更新网格视图中DataBound事件中的计数...
将此添加到您的ASPX:
<asp:GridView ID="WO_list" runat="server" OnDataBound="WO_list_DataBound" ... />
然后将其添加到Code Behind(C#):
protected void WO_list_DataBound(EventArgs e){ WOs_count.Text = WO_list.Rows.Count.ToString(); }
尝试一下,如果其中一个/两个都工作,请告诉我。
答案 1 :(得分:-1)
这应该为你解决。
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
WOs_count.Text = WO_list.Rows.Count.ToString();
}