1

私は、sqldatasourceを介してローカルSQLデータベースからグリッドビューを作成しました。

sqldatasource の選択コマンドは次のとおりです。SelectCommand="SELECT * FROM [CERecord] ORDER BY [Priority]"

私のコード ビハインドには、すべてのレコード、アクティブなレコード、完了したレコードのいずれかを表示するラジオ ボタン リストがあります。

protected void rblShowRecords_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (rblShowRecords.SelectedValue)
        {
            case "Show Active/Completed":
                CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
                break;
            case "Show Active":
                CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
                break;
            case "Show Completed":
                CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='true' ORDER BY [Priority]";
                break;
            default:
                break;
        }
        CEDatabaseSource.DataBind();
        gvRecordList.DataBind();
    }

アクティブのみまたは完了のみのモードで行を更新しようとすると、上記の方法で新しいコマンドを設定したにもかかわらず、すべての行が表示され始めたように見えるという奇妙な問題が発生しています。

グリッドビューの行で更新をクリックすると、常にデフォルトの選択コマンドが実行されますSelectCommand="SELECT * FROM [CERecord] ORDER BY [Priority]"か?

4

1 に答える 1

0

行の [更新] ボタンをクリックすると、選択したインデックスが変更されるため、selectedIndexChanged イベントが実行されます。

グリッドをクリックするたびにこの SQL を起動しないようにする最善の方法は、クリックごとに起動しない別のメソッドにコードを移動することです。

また、インライン SQL を使用していることにも注意してください。これは大きなセキュリティ上の欠陥です。SELECT ステートメントにとってはそれほど悪いことではありませんが、これは悪い習慣です。代わりに、パラメーター化されたストアド プロシージャまたはデータ アクセス レイヤーを使用してデータを取得し、入力を検証することを忘れないでください。

于 2013-03-14T15:43:08.970 に答える