- PR -

FromView, GridViewでのテンプレートについて

1
投稿者投稿内容
こころ
会議室デビュー日: 2007/09/19
投稿数: 3
投稿日時: 2007-09-19 21:02
FromView, GridViewでのテンプレートについて
ページが読み込みされる時に、mode=(new,edit)等パラメータ等により
テンプレートを動的に切り替えたいと思っています。

<呼び出し元より>
Response.Redirect("~/kaimono_entry.aspx?MODE=new);


新規登録のテンプレートで開きたい。。

現在、Visual Studio 2005 C#を使用しています。
何方かご存知でしたら教えてください。

宜しくお願いいたします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-19 21:55
どうぞ。
http://msdn2.microsoft.com/ja-jp/library/0e39s2ck(VS.80).aspx
ITemplateを実装した独自のクラスを作ることになります。

二種類しかないならGridViewをふたつ張って片方を非表示にするのもいいですね。
こころ
会議室デビュー日: 2007/09/19
投稿数: 3
投稿日時: 2007-09-20 20:46
ご回答ありがとうございました。

>二種類しかないならGridViewをふたつ張って片方を非表示にするのもいいですね。

上記の方が簡単そうなので、こちらでやってみます。
初心者でわからない事がたくさんありますが、
今後とも宜しくお願いいたします。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-21 10:00
ああ、すいません。
ITemplateを実装するのは、動的にTemplateFieldを作る時の話でした。
BoundFieldなどはそんなに面倒なく作ることができます。
コード:

BoundField field = new BoundField();
field.DataField = "Name";
field.HeaderText = "名前";

grid.Columns.Add(field);


こんな感じでいいです。
TemplateFieldも、FlagTemplateというクラスを作ったとして、
コード:

TemplateField field = new TemplateField();
field.HeaderText = "退職";
field.ItemTemplate = new FlagTemplate("RESIGNED");

grid.Columns.Add(field);


と設定の仕方は同じようなものです。
FlagTemplateの中身は
コード:

public class FlagTemplate : ITemplate
{
string bindColumnName;

public FlagTemplate(string bindColumn)
{
bindColumnName = bindColumn;
}

public void InstantiateIn(Control container)
{
Label lblMaru = new Label();
lblMaru.Text = "○";
lblMaru.DataBinding += delegate(object sender, EventArgs e)
{
Label lbl = (Label)sender;
GridViewRow cntn = (GridViewRow)lbl.NamingContainer;
DataRow dataRow = (DataRow)cntn.DataItem;
if ( (int)dataRow[bindColumnName] == 0 ) lbl.Visible = false;
};
container.Controls.Add(lblMaru);
}
}


こんな感じかと思います。テキストエディタ上で書いたので動作確認はしてませんが。

[ メッセージ編集済み 編集者: 一郎 編集日時 2007-09-21 10:02 ]
こころ
会議室デビュー日: 2007/09/19
投稿数: 3
投稿日時: 2007-09-24 10:28
ご回答ありがとうございます。

BoundFieldの動的作成について勉強になりました。
今回の対応は、「新規登録」「編集」のテンプレートを用意して
ページが読み込みされる時に、mode=(new,edit)等パラメータ等により
そのテンプレートを切り替える事が目的でした。

上記は、2つのFormViewを作成し、
表示/非表示を切り替える事で対応できると思うのですが、
FormViewには、inputItemTemplate, editItemTemplateを持っているため、
FormLoad時に、このテンプレートを切り替える事ができれば
1つのFormViewで対応できるのかなと思いました。

FormLoad時にFromViewのテンプレートを切り替える方法がありましたら
教えていただけないでしょうか?

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-26 11:20
FormViewコントロールのItemTemplateもEditItemTemplateもITemplate型ですので、同じようにITemplateを実装したクラスを作って設定するだけです。
GridViewと違うのは、GridViewはColumnごとにそれぞれTemplateをを設定しますが、FormViewは全部でひとつということです。
私が例に挙げたクラスのInstantiateIn()メソッドの中でFormViewで表示したいコントロールを全てcontainer.Controls.Add()することになります。
1

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