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>

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にまったく慣れていないので、明らかなことを見逃しても驚かないでしょう。

4

2 に答える 2

1

あなたの問題は、グリッドがデータに再バインドされる前に Page_Load イベントが発生していることだと思います。そのため、カウントは常に 1 ポストバック遅れます。

OnPreRender(object sender, EventArgs e)Grid View の DataBound イベントでカウントを更新するなど、後の Page イベントでカウントを更新してみることができます...

これを 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 に答える