Button Function in content Page not working

Hi I have created Master and Content pages.In the content page I have dynamically created text boxes.and have a button function called Reload which loads the textboxes with the data from the SQL datadase.
  Actually I had in the content page i had
controlid = "textbox" + counter.ToString();
 TextBox tb = form2.FindControl(controlid) as TextBox;

then i changed this to
controlid = "textbox" + counter.ToString();
 TextBox tb = FindControl(controlid) as TextBox;
(removing the form2.As the form2 was present in the Master page)

Now I have the Page with the Master page and content page displaying the textboxes.
But when I click the button Reload in the Content page I get the error
Object reference not set to an instance of an object.

The problem is some where around
 controlid = "textbox" + counter.ToString();
                    TextBox tb = FindControl(controlid) as TextBox;
                    tb.Text = (row[col]).ToString();

I tried with Master.findControl("controlid") as TextBox.
I also tried adding in the content page <%@ MasterType VirtualPath="~/FirstPage.Master" %>
But it is not working still.

Can anyone help me how I can make my button functions work

MY maser page code is
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="FirstPage.master.cs" Inherits="HRdbwebapp.FirstPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Untitled Page</title>

  <link href="~/StyleSheet.css" rel="Stylesheet" type="text/css" />
</head>
<body>
  <form id="form2" runat="server">
    <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal">
      <Items>
        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" Value="Home"/>
        <asp:MenuItem NavigateUrl="~/WebForm1.aspx" Text="  Report1  " Value="Report1"/>
        <asp:MenuItem NavigateUrl="~/WebForm2.aspx" Text="  Report2  " Value="Report2"/>
        <asp:MenuItem NavigateUrl="~/WebForm3.aspx"  Text="  Report3  " Value="Report3"/>
      </Items>      
    </asp:Menu>
    <div>
      <div id="main">
        <asp:ContentPlaceHolder ID="mainContent" runat="server" />
      </div>
      <div id="footer">
        <asp:Literal ID="Footer" runat="server" Text="Procredit-Holding.com" />
      </div>    
    </div>
  </form>
</body>
</html>

Open in new window


the content page code is
<%@ Page Title="" Language="C#" MasterPageFile="~/FirstPage.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="HRdbwebapp.WebForm3" %>
<%@ MasterType VirtualPath="~/FirstPage.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="mainContent" runat="server">
        <asp:Label ID="Label3" runat="server" style="color: #990000" Text="Label"></asp:Label>
        <asp:Label ID="Label1" runat="server" Text="Label" Visible="False"></asp:Label>
        <asp:Label ID="Label2" runat="server" Enabled="False" EnableTheming="False" 
            EnableViewState="False" Text="Label" Visible="False"></asp:Label>       
        <br />
  <table style="width:100%; margin-bottom: 0px;">
           <tr><td class="style32" colspan="9" style="text-decoration: blink">
Click the Enter Radio Button to make a new Entry</td>
</tr>
<tr>
<td><asp:RadioButton ID="Enter" runat="server" AutoPostBack="True" Font-Bold="True" 
                        Font-Italic="True" ForeColor="Black" oncheckedchanged="Enter_CheckedChanged" 
                        Text="Enter" /></td>
<td> <asp:TextBox ID="TextBoxDate" runat="server" Height="22px" Width="121px" 
                        ForeColor="#996600"></asp:TextBox> </td>  
<td class="style23" >
                    Enter the data from</td> 
<td><asp:TextBox ID="TextBoxStart" runat="server" Width="95px" ForeColor="#996600"></asp:TextBox>
                    </td>
<td>to</td> 
<td><asp:TextBox ID="TextBoxEnd" runat="server" Width="95px" ForeColor="#996600"></asp:TextBox>
                </td>
<td> <asp:Button ID="SubmitBtn" runat="server" OnClick="SubmitBtn_Click" Text="Submit" 
            Width="70px" BackColor="#00CCFF" Font-Bold="True" Font-Italic="True" />    </td>  
<td>  <asp:Button ID="ClearBtn" runat="server" onclick="ClearBtn_Click" 
                        Text="Clear" BackColor="#00CCFF" BorderColor="White" Font-Bold="True" 
                        Font-Italic="True" ForeColor="Black" Width="70px" /></td> 
                        
<td> <asp:Button ID="PrintBtn" runat="server" BackColor="#00CCFF" Font-Bold="True" 
                        Font-Italic="True" onclick="PrintBtn_Click1" Text="Print" Width="70px" />
                        </td>                      
<td><asp:Button ID="NxtPageBtn" runat="server" onclick="NxtPageBtn_Click" 
            Text="Next Page" Width="97px" BackColor="#00CCFF" Font-Bold="True" Font-Italic="True" 
                        style="margin-left: 19px" /></td>
<td> <asp:Button ID="SignOutBtn" runat="server" onclick="SignOutBtn_Click" 
            Text="Sign Out" Height="26px" style="margin-left: 0px" Width="70px" 
                        BackColor="#00CCFF" Font-Bold="True" Font-Italic="True" /></td>                      
</tr>          <tr>
                <td class="style33">   
                    <asp:RadioButton ID="Search" runat="server" AutoPostBack="True" 
                        Font-Bold="True" Font-Italic="True" ForeColor="Black" 
                        oncheckedchanged="Search_CheckedChanged" Text="Search" />   
                </td>
                <td class="style34">
                    <asp:DropDownList ID="DropDownList1" runat="server" 
                        DataSourceID="SqlDataSource1" DataTextField="To_Date" 
                        DataValueField="Period_ID" Height="25px" style="margin-left: 0px" 
                        Width="140px">
                    </asp:DropDownList>
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:XXX%>"                  
                        SelectCommand="SELECT [Period_ID], [To_Date] FROM [Period] ORDER BY [Period_ID] DESC">
                    </asp:SqlDataSource>
                    
                </td>
                <td class="style35" >   
        <asp:Button ID="ReloadBtn" runat="server" onclick="ReloadBtn_Click" 
            Text="Reload" Width="70px" BackColor="#00CCFF" Font-Bold="True" Font-Italic="True" />
      
                </td>
                <td class="style36">     
                    <asp:Button ID="ReSubmitBtn" runat="server" onclick="ReSubmitBtn_Click" 
            Text="ReSubmit" BackColor="#00CCFF" BorderColor="White" Font-Bold="True" 
                        Font-Italic="True" ForeColor="Black" Width="70px" />
                </td>         
            </tr>
        </table>   
                REPORT 3       
                <asp:Panel ID="Panel1" runat="server" Height="1194px" Width="766px">     
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
             </asp:Panel>
</asp:Content>

Open in new window

´

The C # code for the button function is
protected void ReloadBtn_Click(object sender, EventArgs e)
        {
            int counter = tblCols;
            string controlid = "1";
            int institute = Convert.ToInt32(Label1.Text);
            int period = Convert.ToInt32(DropDownList1.SelectedValue);
            sqlCon.Open();
            // Create DataAdapter object    
            SqlDataAdapter da = new SqlDataAdapter("SELECT A,B,C FROM Report3 WHERE Institution_no=" + institute + " AND Period_ID=" + period + "", sqlCon);
                      DataTable dt = new DataTable();
            da.Fill(dt);
            Response.Write(dt);
            //6:Access data row wise using for each loop 
            foreach (DataRow row in dt.Rows)
            {
                foreach (DataColumn col in dt.Columns)
                {
                    controlid = "textbox" + counter.ToString();
                    TextBox tb = Master.FindControl(controlid) as TextBox;
                    tb.Text = (row[col]).ToString();
                                    if ((counter == ((tblCols - 1) * 7)) || (counter == ((tblCols - 1) * 10)) || (counter == ((tblCols - 1) * 24)) || (counter == ((tblCols - 1) * 31)) || (counter == ((tblCols - 1) * 35)))
                        counter = counter + 11;

                    else
                        counter = counter + 1;
                                   }
            }
            sqlCon.Close();
        } 

Open in new window


asudhaaAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Imran Javed ZiaConsultant Software Engineer - .NET ArchitectCommented:
Hi,
you have to use if youadding textbox directly

TextBox tb = Me.FindControl(controlid) as TextBox;

and if you are adding textbox in container control like placeholder then use

controlid = "textbox" + counter.ToString();  
TextBox tb = ctrl.FindControl(controlid) as TextBox;


Thanks
0
HohlovDimaCommented:
Hi,
Can you show your code-behind where you create textbox? As i dont see it i can only suggest.You create textboxes dynamically and you see them on page. Then you click button and it calls post back then you try to load data to textbox but after post back you dont create textbox one more and when you try to find there is no it on page anymore. So when on page load event try to create that textboxes everytime.
Best regards,
Dima.
0
asudhaaAuthor Commented:
Thanks.As I am using place holder I used the code
controlid = "textbox" + counter.ToString();  
TextBox tb = ctrl.FindControl(controlid) as TextBox;

But now I get the error
"The name 'ctrl' does not exist in the current context."
I hope I have to define this control like Control ctrl
But where should I use this or do I need to add something else?

 foreach (DataRow row in dt.Rows)
            {
                foreach (DataColumn col in dt.Columns)
                {
                    controlid = "textbox" + counter.ToString();
                    TextBox tb =FindControl(controlid) as TextBox;
                    tb.Text = (row[col]).ToString();
                    //to exclude the values of the sub totals which is not neede
                    if ((counter == ((tblCols - 1) * 7) ) || (counter == ((tblCols - 1) * 10) ) || (counter == ((tblCols - 1) * 24)) || (counter == ((tblCols - 1) * 31) ) || (counter == ((tblCols - 1) * 35) ))
                        counter = counter + 11;            
                    else
                        counter = counter + 1;
                             }
            }

thanks in advance
0
Introduction to R

R is considered the predominant language for data scientist and statisticians. Learn how to use R for your own data science projects.

Imran Javed ZiaConsultant Software Engineer - .NET ArchitectCommented:
please post the code which is adding textboxes in place holder
0
Imran Javed ZiaConsultant Software Engineer - .NET ArchitectCommented:
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
asudhaaAuthor Commented:
My page load function is
 protected void Page_Load(object sender, EventArgs e)
 {
.
.
. CreateDynamicTable(tblRows_list, tblCols_list);
}

private void CreateDynamicTable(int countlist, int countcollist)
        {
            
            PlaceHolder1.Controls.Clear();
            tblRows = countlist;
            tblCols = countcollist;
            Table tbl = new Table();
            // Add the table to the placeholder control
            PlaceHolder1.Controls.Add(tbl);
            // Now iterate through the table and add your controls 
            for (int i = 0; i < tblRows + 1; i++)
            {
                TableRow tr = new TableRow();

                for (int j = 0; j < tblCols; j++)
                {
                    TableCell tc = new TableCell();

                    if (i == 0)
                    {
                        Label label = new Label();
                        label.ForeColor = Color.Blue;
                        label.Width = 82;
                        label.Text = ColumnList[j].ToString();
                        // Add the control to the TableCell
                        tc.Controls.Add(label);
                        // Add the TableCell to the TableRow
                        tr.Cells.Add(tc);
                    }
                    if (j == 0 && i == 0)
                    {
                        Label label = new Label();
                        label.ForeColor = Color.Red;
                        label.Font.Bold = true;
                        label.Width = 300;
                        label.Text = " Position/Number of Staff";
                        // Add the control to the TableCell
                        tc.Controls.Add(label);
                        // Add the TableCell to the TableRow
                        tr.Cells.Add(tc);
                    }
                                    else if (i != 0)
                    {

                        TextBox tb = new TextBox();
                        tb.ID = "textbox" + textbox_counter.ToString();
                        //tb.Attributes.Add("runat", "Server");
                        //tb.Attributes.Add("onkeypress", "return isNumberKey(event)");
                        string[] stringArray = (string[])MainCategorieList.ToArray(typeof(string));
                        int s = Array.IndexOf(stringArray, RowList[i].ToString());
                        //Response.Write("The values to be skipped are " + s);
                        if ((s != -1) || (j == (tblCols - 1)))
                            tb.ForeColor = System.Drawing.Color.Blue; 
                        tb.Height = 18;
                        tb.Width = 75;
                       
                       Controls.Add(tb);
                        // Add the control to the TableCell
                        tc.Controls.Add(tb);
                        // Add the TableCell to the TableRow
                        tr.Cells.Add(tc);
                        textbox_counter = textbox_counter + 1;
                        //tb.Attributes.Add("onclick", "UpdateTotal1();");
                    }
                }
                // Add the TableRow to the Table
                tbl.Rows.Add(tr);
            }

              ViewState["dynamictable"] = true;      
        }

Open in new window


I hope  after post back I  dont create textbox once again and when I try to find it is not working in the page  anymore
Kindly suggest me how I can create the Textbox everytime the page loads?

Thanks in advance
0
asudhaaAuthor Commented:
The error page

Actually I have the text boxes in the conetnt page.When I click the button then the page stops working and I get the error in my program page as shown in the Image.

But if I click other button functions which are not related to the dynamically created textboxes,it works.

Kindly help me solve this problem

0
HohlovDimaCommented:
Hi.
If i undersand you right you cant find textbox on table, that created dynamically. So i Create a sample that works.
You only need to make code like this:
this is for function reload
^
                    controlid = "textbox" + counter.ToString();
                    Table t = PlaceHolder1.FindControl("tableee") as Table;
                    TextBox tb = t.FindControl(controlid) as TextBox;
                    tb.Text = "Text";

Open in new window


And add one line to function CreateDynamicallyTable:
tbl.ID = "tableee";

Open in new window


And everything will work fine. If you need i could place whole example here.
Best regards,
Dima.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.