- - PR -
ObjectListで画像表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-18 23:34
お世話になります。
Mobileで商品リストの表示を行おうとしています。 商品の一覧をObjectListに保存し、詳細画面を開いたときに 商品コード、商品名称と共に画像を表示させたいと思ったのですが、 うまくいきません。(そもそも無理???) いろいろ検索してみたのですが、それらしき文献もないので ご存知の方がおられましたら、ご教授お願い致します。 DataGridのItemTemplateのようなものは存在しないのでしょうか? | ||||
|
投稿日時: 2007-01-19 10:53
Mobile 開発の開発環境は?
ObjectList ってことは VisualStudio2003 の ASP.NETモバイルWebアプリケーションかな。 ObjectList にも ItemTemplate ありますよ。 テンプレートの定義の仕方が独特なので MSDN 等で確認することをお勧めします。 デバイスフィルタを作って、フィルタごとにどのスキーマを使うかを定義した後にテンプレートの設定をします。 http://msdn2.microsoft.com/ja-jp/library/6c1x9zwd(VS.80).aspx _________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-01-19 18:31
便乗して、質問です。
テンプレート内のコントロールを、ItemDataBindイベントで取得する方法をご存じでしょうか? コードビハインド側のMenuList_ItemDataBindで、Link1を見つけそのリンクの NavigateUrlを設定したいのですが。 【参考コード】 ---------------------------------------------- <mobile:List ID="MenuList" Runat="server" OnItemDataBind="MenuList_ItemDataBind"> <DeviceSpecific> <Choice> <ItemTemplate> <mobile:Link ID="Link1" Runat="server">Link</mobile:Link> </ItemTemplate> </Choice> </DeviceSpecific> </mobile:List> ---------------------------------------------- | ||||
|
投稿日時: 2007-01-19 19:36
自己レスです。
MenuList_ItemDataBindのイベント引数e.ListItem.FindControlで、 画面に配置したリンクを見つけようとしましたが、nullなのでダメでした。 代案として、リンクを動的に生成して追加しようと考えたのですが、 e.ListItemに追加しても意味がないようです。 this.Form1.Controlsに追加すれば追加されますが、 画面上のコントロールに追加されるだけで、意味がありません。 WebGridやRepeaterのようには利用できないのでしょうか・・・。 【参考コード】 -------------------------------------------------------- protected void Page_Load(object sender, EventArgs e) { DataTable menu = new DataTable(); menu.Columns.Add("url_id", typeof(int)); menu.Columns.Add("url", typeof(string)); menu.Rows.Add(new object[] { 1, "/m/A.aspx" }); menu.Rows.Add(new object[] { 2, "/m/B.aspx" }); menu.Rows.Add(new object[] { 3, "/m/C.aspx" }); this.MenuList.DataSource = menu; this.MenuList.DataBind(); } protected void MenuList_ItemDataBind(object sender, ListDataBindEventArgs e) { //バイドされるデータから情報を取得する。 DataRowView drv = (DataRowView)e.DataItem; string url = drv["url"].ToString(); string id = drv["url_id"].ToString(); //この結果はnullなので、利用できない //Link foundLink = (Link)e.ListItem.FindControl("Link1"); //foundLink.NavigateUrl = url; //foundLink.Text = id; //代案として、動的に生成したリンクを利用する Link createdLink = new Link(); createdLink.NavigateUrl = url; createdLink.Text = id; //e.ListItemに追加しても、追加されない。 //e.ListItem.Controls.Add(createdLink); //フォームに追加すると、追加されるがバインドしている意味がない this.Form1.Controls.Add(createdLink); } -------------------------------------------------------- | ||||
|
投稿日時: 2007-01-20 18:50
DataBinder.Eval() でじかに書き出してあげるのはどうだろう。
_________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-01-22 10:08
かるあさん、ありがとうございます。
DataBinder.Eval()で解決しました。 バインド時にウェブ(モバイル)コントロールのプロパティを DataBinder.Evalで設定できることを初めて知りました。 いままでも、コードビハンド側でわざわざFindControlして設定して いましたので。 無知は罪ですね(^^; | ||||
|
投稿日時: 2007-01-23 17:29
かるあさん、お答え頂きありがとうございます。
まずは、お詫びを。 昨日まで風邪により寝込んでしまいました。 返信が遅くなり申し訳ございません。 開発はバージョン1.1で行っています。 なさけないのですが、VisualStudioはありません。 本日MSDNを読んでみたのですが、かなり難しそうですね。 web.configとかも修正しなければいけないようですし。 まだ読み始めたばかりですが、じっくり腰を据えて読んで いかないと把握できないようです。 簡単なサンプルなどは無いでしょうか?ロジックを見ながら 読んでいった方が理解し易いと思うのですが。 | ||||
|
投稿日時: 2007-01-24 00:53
上にある がーす さん とのやり取りは参考になりませんでしたか? モバイルWeb開発の場合、結局描画の部分に関してはフィルタ頼みになるので、 難しくても頑張って読み解いていったほうがいいです。 前に(@IT かな・・・)で記事はあったと思いますので検索してみてください。 ここまで書いておいてなんですが、 フィルタのメンテナンスや結局テンプレート内にHTMLをガリガリ書くことになったりするので、 今から新規で開発するとするとあまりお勧めはできませんよ。 マイクロソフトからの次のリリースもなさそうだし。。。 _________________ かるあ のメモ と スニペット |