1

に表示されるローカル DB テーブルがありますGridView。そのテーブルには、「完了」という列があります。

テーブルを最初に表示すると、完了したレコードが表示されません (Completed=false)。SqlDataSource選択コマンドは次のとおりです。

"SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";

ポストバックを引き起こすチェックボックスがあります。チェックを入れたり外したりして、完了したレコードの表示を切り替えたい:

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e)
    {
        if (cbShowCompletedRecords.Checked)
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
        else
        {
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
        }
    }

現在、チェックボックスをオンにすると、すべてのレコードが取得されます。しかし、チェックを外すと、GridView上記のコードが実行されても更新されません。私は何が欠けていますか?

4

3 に答える 3

2

ブロックの後にGridViewsDataBindメソッドを使用してみてくださいif...else

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e)
    {
        if (cbShowCompletedRecords.Checked)
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
        else
        {
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
        }

        yourGrid.DataBind();
    }

これにより、グリッドに表示される結果に、select ステートメントに加えた変更が反映されます。

于 2013-03-14T14:24:32.197 に答える
1

SqlDataSourceを使用すると、パラメーターをバインドしてプロパティを制御できます。

<asp:SqlDataSource ID="myds" runat="server" 
  SelectCommand="SELECT * FROM [CERecord] WHERE [Completed]=:COMPLETED ORDER BY [Priority]">
  <SelectParameters>
    <asp:ControlParameter ControlID="MyCheckbox" Name="COMPLETED" PropertyName="Checked" Type="Boolean" />
  </SelectParameters>
</asp:SqlDataSource>

これにより、チェックボックスの「チェック済み」プロパティに従って選択コマンドが変更されます。

于 2013-03-14T14:22:52.567 に答える
-1

完了がDBのビットタイプである場合は、クエリを次のように変更します。

"SELECT * FROM [CERecord] WHERE [Completed]=0 ORDER BY [Priority]";
于 2013-03-14T14:23:44.693 に答える