3

I have created few textbox dynamically while coding in the flow I have provided unique id for each and I have hard coded some values to all the text boxes using C#.

Now on click of button am trying to retrieve the values from the textbox for which I have used the below code, but its throwing an exception as OBJECT REFERENCE NOT SET TO INSTANCE OF AN OBJECT.

Please look at the below code, I have tried both the things but still am not getting.
Please help me out.
Thanks

protected void btnPltGrap_onclick(object sender, EventArgs e)
{
    //spny is my stack panel and txtX0 is my of the text box id
    //Below is the 1st Try        
     TextBox tb = new TextBox(); 
     tb= (TextBox)Master.FindControl("spnY").FindControl("txtX0");
     string strx = tb.Text;
      //Below is the 2nd Try 
     string strx = (spnY.FindControl("txtX0") as TextBox).Text;
 }

Thanks

Am trying to use view state as per you told that i shlould recreate the controls ones again but am getting exception as Invalid Arguments. please go have a look.

protected void btnSet_onClick(object sender, EventArgs e)
 {
    Table tblMainY = new Table();
    TableRow tblRow = new TableRow();
    tblMainY.Controls.Add(tblRow);
    TableCell tblCel = new TableCell();
    TextBox txtdyn = new TextBox();
    txtdyn.Text = "1";
    txtdyn.ID = "txtY01"; 
    txtdyn.Width = 50;
    tblCel.Controls.Add(txtdyn);
    tblRow.Controls.Add(tblCel);    
    splY.Controls.Add(tblMainY);
    ViewState["temptbl"] = tblMainY
}
protected void btnPltGrap_onclick(object sender, EventArgs e)
{
    splY.Controls.Add(ViewState["Temptbl"]);
}
Please help me out
4

4 に答える 4

1

私は過去に同じ問題を抱えていました。

私がしたことは、動的に追加されたコントロールに ID を与え、ポストバックでもその ID を保持していることを確認することでした。

ポストバックされたコントロールが以前と同じ ID を持つと、Microsoft はマジックを行い、コントロールにポストバック前の値を再入力しました。

このコードを一度読んでください

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.NumberOfControls = 0; //very first time when page is loaded, value will be 0
        else
            this.createControls(); //if it is postback it will recreate the controls according to number of control has been created
    }

    //this is the base of this, it will hold the number of controls has been created, called properties
    protected int NumberOfControls 
    {
        get { return (int)ViewState["NumControls"]; }
        set { ViewState["NumControls"] = value; }
    }

    //it will create the controls 
    protected void createControls()
    {
        int count = this.NumberOfControls;
        for (int i = 0; i < count; i++) //loop for the total number of control.
        {
            TextBox tx = new TextBox(); //creating new control
            tx.ID = "ControlID_" + i.ToString(); //in your solution you are giving static id, don't do that, assign id number dynamically, it will help you further, if you want to manipulate the controls for some other use
            //Add the Controls to the container of your choice
            form1.Controls.Add(tx);
        }
    }

    //add new control
    protected void addSomeControl()
    {
        TextBox tx = new TextBox();
        tx.ID = "ControlID_" + NumberOfControls.ToString();
        form1.Controls.Add(tx);
        this.NumberOfControls++; //increment the number of control
    }

    protected void AddBtn_Click(object sender, EventArgs e)
    {
        addSomeControl(); 
    }
于 2013-03-28T06:52:03.847 に答える
0

私のブログとして以下のリンクのいくつかのサンプルコード

controlを使用して動的に値と検証を使用してテキストボックスを配置および取得する方法について説明しますpanel

この URL に行きましょう。そしてあなたは良い解決策を得ることができます

検証を使用して動的テキストボックスとドロップダウンリストを取得および作成する

テキストボックスの値を取得するための単純な行

TextBox objTextBox = (TextBox)PlaceHolder.FindControl("CorrecttextBoxName");
string value=objTextBox .Text;
于 2013-03-28T07:05:20.483 に答える
0

その値を取得するには、コントロールを再作成する必要がありinitます。
ここにいくつかのリンクがあります
asp.netで動的に作成されたテキストボックスからテキストを取得する

編集 1

TextBox tb=(TextBox)ViewState["Temptbl"];
splY.Controls.Add(tb);
于 2013-03-28T06:50:15.203 に答える
0

Default.aspx は、aspx ファイルでプレースホルダー タグを取得します。

< asp:PlaceHolder ID="PlaceHolder1" runat="server">

Default.aspx.cs // ダイナミック テキスト ボックスの追加/作成

            TextBox txt = new TextBox();
            txt.ID = "New_txt";
            txt.TextMode = TextBoxMode.MultiLine;
            txt.Text = dt.Rows[0]["message"].ToString();
            txt.Width = 802;
            txt.Height = 450;
            txt.ReadOnly = true;
            PlaceHolder1.Controls.Add(txt);

テキスト ボックスから値を取得する

文字列 str = txt.Text;

于 2013-03-28T08:00:58.177 に答える