1

asp.net web-forms アプリケーションで GridView を使用して ObjectDataSource を設定しようとしています。ObjectDataSource に使用する予定の select コマンドは、ストアド プロシージャを使用してデータベースにクエリを実行することで、次のように DataTable を返します。

public DataTable GetProductsById(string ids = null)
        {

            DataTable productDataTable = new DataTable();

            // Stored procedure (sqldb server) is executed here
            SqlCommand cmd = new SqlCommand("GetProductByIdsRML_CLR", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParam = new SqlParameter("@ids", SqlDbType.NVarChar);
            myParam.Value = (ids);
            cmd.Parameters.Add(myParam);
            SqlDataAdapter dataAdapter = new SqlDataAdapter();
            dataAdapter.SelectCommand = cmd;

            dataAdapter.Fill(productDataTable);

            return productDataTable;
        }

このメソッドは、製品 ID のカンマ区切りのリストである文字列を引数として取ります。このパラメータは、クエリを実行するストアド プロシージャに渡されます。ただし、この入力idsはコード内の別のメソッドを介してこのメ​​ソッドに渡されるため、これを正しく設定するのに問題があります。ここに問題があります。ObjectDataSource をセットアップしようとすると、ストアド プロシージャのパラメーターをどこから取得するかを尋ねられますが、「別のメソッド」はオプションではないためです。これが私が話していることです: objectdatasource のパラメーターの選択

これらのオプションはどれも、「このプロジェクトの別の方法」をカプセル化していないようです。この状況で何をすべきかを誰かが知っていれば、それは素晴らしいことです。また、ストアド プロシージャから DataTable を返すのが得策でない場合は、それも問題ありません。かなり簡単に変更できますが、問題は解決しません。ありがとうございました!これには非常に簡単な解決策があるように感じます...

4

2 に答える 2

1

msdn のこのチュートリアルのおかげで、これを整理しました。

http://msdn.microsoft.com/en-us/library/aa581787.aspx

記事の終わりに向かって、私がやりたいことをコードで実装する方法を示します。そのドロップダウンから「なし」を選択しSelecting、ObjectDataSource のイベントのコードビハインドにパラメーターを配置すると、私の場合は次のようになります。

protected void ObjectDataSource1_Selecting(object sender,
                                           ObjectDataSourceSelectingEventArgs e)
        {
            e.InputParameters["ids"] = SearchResults.idList;
        }

idListストアド プロシージャに渡す必要がある文字列のコンマ区切りリストはどこにありますか。GridView + ObjectDataSource は、その idList フィールドが毎回定義されている限り、残りのほとんどを処理します。

于 2013-07-03T15:12:50.810 に答える
0

1 つのオプションは、メソッドを使用Sessionしてから消費し、そこに変数を設定することです。OnLoadCompletePageSession

protected override void OnLoadComplete(EventArgs e)
{
    ...
}
于 2013-07-03T14:14:05.460 に答える