- PR -

ObjectDataSourceでPageオブジェクトを使用するには?

1
投稿者投稿内容
DOLPHIN
会議室デビュー日: 2006/09/14
投稿数: 11
投稿日時: 2007-06-18 23:15
環境:VS2005 C#、Windows/XP
Webアプリケーション

画面にファイルアップロードコントロールと、GridView があります。
ファイルアップロードのイベントを契機に CSVファイルの内容を ObjectDataSource の Select メソッド内でファイルアップロードの内容をGridViewに展開したいと考えています。
しかし、ObjectDataSource を継承して作ったクラスから Page オブジェクトを参照しても、null でした。
因みに FindControl でファイルアップロードコントロールを指しましたが、やっぱりnullでした。
ObjectDataSource クラスでPageオブジェクトを取得することは無理なのでしょうか。

この画面の機能には、他に検索ボタンによりDBから取得する処理もあり、このクラスですべての処理を実装させたいと考えています。

このような方法がありましたら、ご教授頂けないでしょうか。
よろしくお願いします。
DOLPHIN
会議室デビュー日: 2006/09/14
投稿数: 11
投稿日時: 2007-06-19 21:12
別の手段があることがわかりまして、その方法で行うことにしました。

Selecting イベントで、ファイルアップロードのデータを取得し InputParameters に値を設定すると、ObjectDataSource の既定の Select メソッドが呼ばれ取得可能でした。
この時、Addでパラメータを追加すると既定以外のシグネチャに合致したメソッドが呼ばれるという予想出来なかった動きに、これでいいのか躊躇してしまいます。
とっても、トリッキーな仕組みを提供しているだな〜と。

/* Form側 */
protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if (IsPostBack)
{
System.IO.Stream input;
HtmlInputFile file = (HtmlInputFile)FindControl("txtTorikomiFile");
input = file.PostedFile.InputStream;

Byte[] data = new Byte[input.Length];
input.Read(data, 0, Convert.ToInt16(input.Length));
e.InputParameters["dataFlag"] = "2";
e.InputParameters.Add("data", data);
}
}

/* ObjectDataSource側 */

[DataObjectMethod(DataObjectMethodType.Select, true)]
public DataTable getEnergeeData(string nendo, string dataFlag)
{
DataTable table;
if (dataFlag == null)
{
table = GetDatabase(nendo);
}
else
{
table = GetExcelFile();
}
return table;
}
public DataTable getEnergeeData(string nendo, string dataFlag, byte[] data)
{
return null;
}
1

スキルアップ/キャリアアップ(JOB@IT)