- - PR -
動的コントロール追加に関して
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-04-22 16:20
使用言語:ASP.NET(VB.NET)
OS:Windows2000 ブラウザ:IE5.5以上 過去の書き込みを参考にして動的にテキストボックスを追加する処理を作成しました。 テキストボックスの追加とサーバー側での取得は出来ました。 2つ程分からないことがあるのでご教授お願いします。 @MSゴシックの設定 Dim conTextBox As System.Web.UI.WebControls.TextBox と、テキストボックスの追加時に 幅の設定や conTextBox.Width = System.Web.UI.WebControls.Unit.Parse("60px") フォントサイズの設定 conTextBox.Font.Size = System.Web.UI.WebControls.FontUnit.XSmall のやり方は分かったのですがMSゴシックの設定の仕方が分かりません。 Aクライアント側のID コントロール追加時のID設定は右のように行いました。 -> conTextBox.ID = "textAdd_" & 数字 クライアント側javascriptで追加したテキストボックスの値を取得したいのですが document.Form1.textAdd_0.value + document.Form1.textAdd_1.value + ・・・ + ocument.Form1.textAdd_100.value といったように取得しなければならないため、scriptもテキストボックスに合わせて変更しなければなりません。 動的に作成するテキストボックスのクライアントで使用するIDを同じもの(textAdd)にして for (count = 0; count < 指定された値; count++){ total += document.Form1.textAdd[count].value; } としたいのです。 サーバー側は一意でクライアント側は同じIDを使うといったことは出来るのでしょうか? 以上の2つに関して分かる方がいましたらお願いします。 もし無理なら「無理」と言ってくれるだけでも良いです。 Aに関しては他に良いクライアントでの処理方法があるようでしたら教えてください。 scriptが「document.Form1.textAdd_ + count + .value」みたいに出来れば良いのですが・・ |
|
投稿日時: 2004-04-22 16:40
投稿してすぐに自己レスです。
@のほうのMS ゴシックの設定方法は分かりました。 conTextBox.Style.Add("font-family", "MS ゴシック") 数時間悩んでたのに・・。 引き続きAのほうをお願いします。 |
|
投稿日時: 2004-04-22 17:44
更に自己レスです。
aspx.vb側で動的コントロールを追加する際に (document.Form1.textAdd_0, document.Form1.textAdd_1) というような配列を作成してscriptで使うといった方法を考えました。 一応動きますが、もう少し考えてみます。 -----aspx.vb----- Dim setObjName As String For i = 0 To 指定した数 If setObjName <> "" Then setObjName += "," End If setObjName += "document.Form1.textAdd_" & i Next Session("setObjName") = setObjName -----aspx----- var setObjName = new Array(<%=Session("setObjName")%>); var total = ""; for (count = 0; count < 指定した数; count++){ total += setObjName[count].value; } |
|
投稿日時: 2004-04-22 19:29
@もAもすごく簡単ですが(C#)
public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected override void OnInit(EventArgs e) { base.OnInit (e); for (int i = 0; i < 10; i++) { TextBox tb = new TextBox(); tb.ID = "textAdd"; tb.Font.Name = "MS ゴシック"; Label1.Controls.Add(tb); } } } |
|
投稿日時: 2004-04-23 13:40
todoさん、レスありがとうございます。
@のほうは.Font.Namesと間違えて指定していたために悩んでいたようです。 todoさんの方法で出来ました。 Aのほうは同じIDに設定することは出来るのですが ボタン押下などでサブミットすると 「同じ ID 'textAdd' を持つ複数のコントロールが見つかりました。FindControl を使うには、コントロールに一意の ID を指定する必要があります。」 と怒られてしまいました。 |
|
投稿日時: 2004-04-23 14:10
ポストバックがあるときはidを一意的に振らないと駄目なようです。
javascriptの方で次のようにかけます。 for (count = 0; count < 指定された値; count++){ total += document.Form1.elements["textAdd_" + count].value; } |
|
投稿日時: 2004-04-23 14:33
todoさん、ありがとうございます。
教えていただいたscriptでばっちりです。 そもそも同じIDにしたかったのは、転送スピードが遅い環境なので scriptを書く量を減らしたかったためですから。 ----- これから健康診断に行ってきます。 |
1