2

おそらく理解されていないので、質問を変更します。私の英語も申し訳ありません...

それらを配列に入れる TextBoxes を動的に作成します。

私のコードの一部:

public partial class NewArticleForm : System.Web.UI.Page
{
    private Label[] lblName;
    private TextBox[] txtName;
    private Label[] lblSurname;
    private TextBox[] txtSurname;
    private PlaceHolder PlaceHolder1;

    public int NumberOfOtherAuthors()
    {
        Int32 index = Convert.ToInt32(NumberList.SelectedValue);
        return index;
    }

    public void dataofOtherAuthor()
    {
        int authors;
        int i = 0;
        int j=1
        authors = NumberOfOtherAuthors();
        lblName = new Label[authors];
        txtName = new TextBox[authors];
        lblSurname = new Label[authors];
        txtSurname = new TextBox[authors];
        PlaceHolder1 = new PlaceHolder();
        for (i = 0; i < authors; i++)
        {
            Label authorInformation = new Label();
            authorInformation.Text = "Information for Author " + j.ToString() + " :";
            lblName[i] = new Label();
            lblName[i].Text = "Name:";
            txtName[i] = new TextBox();
            lblSurname[i] = new Label();
            lblSurname[i].Text = "Surname:";
            txtSurname[i] = new TextBox();    
            PlaceHolder1.Controls.Add(authorInformation);
            PlaceHolder1.Controls.Add(lblName[i]);
            PlaceHolder1.Controls.Add(txtName[i]); 
            PlaceHolder1.Controls.Add(lblSurname[i]);
            PlaceHolder1.Controls.Add(txtSurname[i]);    
            // Add a spacer in the form of an HTML <BR> element.
            Panel1.Controls.Add(PlaceHolder1);
            j++;      }  }

 protected void NumberList_SelectedIndexChanged(object sender, EventArgs e)
    {
        dataofOtherAuthor();
    }

    private void UploadForm()
    {
        int numberOfOtherAuthors = NumberOfOtherAuthors();
        int i=0;

            for (i = 0; i < numberOfOtherAuthors; i++)
            { 
                Label1.Text = txtName[i].Text;       

            }
        }


    protected void btnUpload_Click(object sender, EventArgs e)
    {
            UploadForm();
    }
}

テキストボックスの値を取得するにはどうすればよいですか?? 具体的には、データベースにデータを渡したいです。ラベルは、値を取得するかどうかのテストです。

ありがとうございました!!!

4

5 に答える 5

1

引用:

txtName = new TextBox[authors];
int authors = 5;

authors配列を作成した後に宣言します。したがって、エラーauthorsはまだ存在せず、後でtxtNameが存在しないことを示します(正しくインスタンス化されなかったため)。次のように変更します。

int authors = 5;
txtName = new TextBox[authors];

また、正確を期すために、に変更Stringしてくださいstring

それはそれをする必要があります

于 2012-05-30T00:16:54.180 に答える
1

気づいているかどうかはわかりませんが、 for ループのすべての反復に配置PlaceHolder1しています。Panel1多分あなたはPanel1.Controls.Add(PlaceHolder1);for ループの後にするつもりでしたか?
とにかく、これらの TextBox コントロールをフォームに配置しました。ポストバック経由でアクセスしようとしている場合は、 setIDでアクセスするか、asp コンテナーを介してアクセスする必要があります (設定中runat="server"):

x = (p1.Controls[placeHolderIndex].Controls[textBoxIndex] as TextBox).Text;

またはあなたが試すことができます

x = (p1.FindControl("placeHolder_ID").FindControl("textBox_ID") as TextBox).Text;

もう一度、それらがすべてであることを確認してくださいrunat="server"

txtNameポストバック後にその値を保持しません。

2 番目のループに、設定された文字列を上書きするよりも便利なことをさせてください。おそらく各値をリストに追加します

List<string> x = new List<string>();
for (i = 0; i < authors; i++)
{  
   x.Add((p1.Controls[placeHolderIndex].Controls[i] as TextBox).Text);
   //increment placeHolderIndex if you don't change your design
}
于 2012-05-30T00:11:17.423 に答える
0

コントロールがポストバックから値を正しく取得するには、適切なタイミングでコントロールを追加する必要があります (通常は OnInit)。

OnInit:

Form1.Controls.Add(myTextbox);

Page_Load:

var text = myTextbox.Text;

HOW TO: Visual C# .NET を使用して ASP.NET でコントロールを動的に作成する、または「ASP.Net 動的コントロールを追加する方法」検索条件に関するその他の多くの説明を確認してください。

于 2012-05-30T00:07:18.143 に答える
0

を呼び出した別のメソッドを使用してオブジェクトを作成しましたtxtName[i]。これが私の問題でした。

public void dataofOtherAuthor() 
    { 
...
txtName[i] = new TextBox(); 
...}

private void UploadForm() 
    { 
...
Label1.Text = txtName[i].Text; 
...
}
于 2012-05-30T12:12:47.033 に答える
0

プレースホルダー内のコントロールを取得するには、Placeholder1.FindControl("[コントロールの名前] を使用します")

コントロールを作成するときに、一意で参照可能な名前をコントロールに付けることができます。

または、コントロールのインデックスがわかっている場合は、 Placeholder1.Controls([Index]でそれらを参照できます。)

于 2012-05-30T00:10:10.267 に答える