- PR -

動的コントロール追加に関して

1
投稿者投稿内容
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 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」みたいに出来れば良いのですが・・
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-22 16:40
投稿してすぐに自己レスです。

@のほうのMS ゴシックの設定方法は分かりました。
conTextBox.Style.Add("font-family", "MS ゴシック")
数時間悩んでたのに・・。

引き続きAのほうをお願いします。
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 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;
}
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 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);
}
}
}
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-23 13:40
todoさん、レスありがとうございます。

@のほうは.Font.Namesと間違えて指定していたために悩んでいたようです。
todoさんの方法で出来ました。

Aのほうは同じIDに設定することは出来るのですが
ボタン押下などでサブミットすると
「同じ ID 'textAdd' を持つ複数のコントロールが見つかりました。FindControl を使うには、コントロールに一意の ID を指定する必要があります。」
と怒られてしまいました。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-04-23 14:10
ポストバックがあるときはidを一意的に振らないと駄目なようです。

javascriptの方で次のようにかけます。

for (count = 0; count < 指定された値; count++){
 total += document.Form1.elements["textAdd_" + count].value;
}
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-23 14:33
todoさん、ありがとうございます。

教えていただいたscriptでばっちりです。
そもそも同じIDにしたかったのは、転送スピードが遅い環境なので
scriptを書く量を減らしたかったためですから。

-----
これから健康診断に行ってきます。
1

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