J'ai un GridView qui affiche les données de ma base de données SQL. L'utilisateur a la possibilité de mettre à jour ou de supprimer la ligne à l'intérieur du GridView. Ce qui semble se produire maintenant, c'est que lorsque l'utilisateur clique sur la ligne pour mettre à jour les zones de texte apparaissent où vous pouvez modifier (jusqu'à ce point, tout fonctionne comme prévu), mais lorsque vous cliquez sur la mise à jour, il se bloque avec l'erreur ci-dessous.

J'ai indiqué dans le code ci-dessous où la ligne est l'endroit où elle se bloque.

System.NullReferenceException: 'Object reference not set to an instance of an object.'

(... as System.Web.UI.WebControls.TextBox) returned null.

Voici le code que j'utilise actuellement: Code derrière

protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = GridView1.Rows[e.RowIndex];
        int customerId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        string name = (row.FindControl("txtName") as TextBox).Text;
        string email = (row.FindControl("txtEmail") as TextBox).Text;
        string license = (row.FindControl("txtLicense") as TextBox).Text;
        string query = "UPDATE License SET DisplayName=@DisplayName, EmailAddress=@EmailAddress, LicenseType=@LicenseType WHERE CustomerId=@CustomerId";
        string constr = ConfigurationManager.ConnectionStrings["LicenseConnection"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(query))
            {
                cmd.Parameters.AddWithValue("@CustomerId", customerId);
                cmd.Parameters.AddWithValue("@DisplayName", name);
                cmd.Parameters.AddWithValue("@EmailAddress", email); <-- Error here
                cmd.Parameters.AddWithValue("@LicenseType", license);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
        GridView1.EditIndex = -1;
        this.BindGrid();
    }

Et:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound"
        DataKeyNames="CustomerId" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" PageSize="3"
        OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting" EmptyDataText="No records has been added."
        Width="450">
      <Columns>
        <asp:TemplateField HeaderText="Display Name" ItemStyle-Width="150">
          <ItemTemplate>
            <asp:Label ID="lblName" runat="server" Text=''
              <%# Eval("DisplayName") %>'></asp:Label>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox ID="txtName" runat="server" Text=''
              <%# Eval("DisplayName") %>' Width="140"></asp:TextBox>
          </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Email Address" ItemStyle-Width="150">
          <ItemTemplate>
            <asp:Label ID="lblEmailAddress" runat="server" Text=''
              <%# Eval("EmailAddress") %>'></asp:Label>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox ID="txtEmailAddress" runat="server" Text=''
              <%# Eval("EmailAddress") %>' Width="140"></asp:TextBox>
          </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="License Type" ItemStyle-Width="150">
          <ItemTemplate>
            <asp:Label ID="lblLicense" runat="server" Text=''
              <%# Eval("LicenseType") %>'></asp:Label>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox ID="txtLicenseType" runat="server" Text=''
              <%# Eval("LicenseType") %>' Width="140"></asp:TextBox>
          </EditItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ButtonType="Link" ShowEditButton="true" ShowDeleteButton="true"
            ItemStyle-Width="150" />
      </Columns>
    </asp:GridView>
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse">
      <tr>
        <td style="width: 150px">
          Name:<br />
          <asp:TextBox ID="txtName" runat="server" Width="250" />
        </td>
        <td style="width: 150px">
          Email Address:<br />
          <asp:TextBox ID="txtEmail" runat="server" Width="250" />
        </td>
        <td style="width: 150px">
          Country:<br />
          <asp:TextBox ID="txtLicense" runat="server" Width="140" />
        </td>
        <td style="width: 150px">
          <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Insert" />
        </td>
      </tr>
    </table>
  </ContentTemplate>
</asp:UpdatePanel>

Je ne sais pas pourquoi cela me donne cette erreur

0
Ellen Sellers 26 nov. 2019 à 10:08

1 réponse

Meilleure réponse

Le nom de votre zone de texte est "txtEmailAddress" et non "txtEmail" .

1
kara 26 nov. 2019 à 07:19