2017-09-24 4 views
0

Ceci est mon avis de balisageNullReferenceExecption tout en ajoutant des contrôles sur DataBound d'un gridview

<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" DataKeyNames="SemesterID" DataSourceID="SqlDataSource1" > 
      <Columns> 
       <asp:BoundField DataField="SemesterID" HeaderText="SemesterID" InsertVisible="False" ReadOnly="True" SortExpression="SemesterID" /> 
       <asp:BoundField DataField="SemesterName" HeaderText="SemesterName" SortExpression="SemesterName" /> 
<asp:TemplateField> 
        <asp:PlaceHolder ID="pHldr" runat="server"></asp:PlaceHolder> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </div> 
     <asp:SqlDataSource ConnectionString="<%$ connectionStrings:MyConnection %>" ID="SqlDataSource1" runat="server" ProviderName="System.Data.SqlClient" SelectCommand="SELECT SemesterID, SemesterName FROM Semesters"></asp:SqlDataSource> 
    </form> 
</body> 

Ceci est mon code fichier behinde

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     for (int i = 0; i < 3; i++) 
     { 
      PlaceHolder plHldr = e.Row.FindControl("pHldr") as PlaceHolder; 
      CheckBox cbx = new CheckBox(); 

      plHldr.Controls.Add(cbx);//Here I get the exception 
     } 
    } 

Je voudrais ajouter des contrôles tels que des cases à cocher au PlaceHolder mais Je reçois NullReferenceException dans plHldr.Controls.Add(cbx);

+0

Peut-être une erreur ici? 'e.Row.FindControl (" pHldr ")' pHldr-> plHldr – ibubi

+0

Non ce n'est pas le cas –

+0

Copie possible de [Qu'est-ce qu'une exception NullReferenceException, et comment la réparer?] (https://stackoverflow.com/ questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – ASpirin

Répondre

0

Probablement parce que vous n'adressez pas la 1ère ligne (avec l'index de ligne -1), qui est le entête. Essayez d'utiliser e.Row.RowIndex pour vous assurer que vous n'essayez pas de lancer des commandes depuis la ligne d'en-tête:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex < 0) return; 

    for (int i = 0; i < 3; i++) 
    { 
     PlaceHolder plHldr = e.Row.FindControl("pHldr") as PlaceHolder; 
     CheckBox cbx = new CheckBox(); 

     plHldr.Controls.Add(cbx);//Here I get the exception 
    } 
}