2012-10-04 30 views
-4

我在ASP.NET和C#中構建了一個簡單的CRUD(創建,讀取,更新,刪除)系統。我得到的錯誤Object reference not set to an instance of an object在線79:有人可以幫我解決這個錯誤:對象引用未設置爲對象的實例

Line 77:  SqlParameter forn = new SqlParameter("@fornavn", SqlDbType.VarChar, 100); 
Line 78:  forn.Direction = ParameterDirection.Input; 
Line 79:  forn.Value = Fornavn.Text; 
Line 80:  insertParameters.Add(forn); 

我的代碼看起來像這樣kunder.aspx:

<%@ Page Language="C#" Debug="true" AutoEventWireup="true" CodeFile="kunder.aspx.cs" Inherits="Secure_kunder" %> 

<!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 runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="KundeGrid" runat="server" AutoGenerateColumns="False" DataSourceID="kundeDataSource" 
      DataKeyNames="kundeid" ShowFooter="true" OnRowCommand="Customers_RowCommand"> 
      <Columns> 
       <asp:TemplateField HeaderText="Kundenr"> 
        <ItemTemplate> 
         <%# Eval("kundeid") %> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Fornavn"> 
        <ItemTemplate> 
         <%# Eval("fornavn") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="EditFornavn" runat="server" Text='<%# Bind("fornavn") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertFirstName" Text='<%# Bind("fornavn") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Efternavn"> 
        <ItemTemplate> 
         <%# Eval("efternavn") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox runat="server" ID="EditLastName" Text='<%# Bind("efternavn") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertLastName" Text='<%# Bind("efternavn") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Firma"> 
        <ItemTemplate> 
         <%# Eval("firma") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox runat="server" ID="EditFirma" Text='<%# Bind("firma") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertFirma" Text='<%# Bind("firma") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Website"> 
        <ItemTemplate> 
         <%# Eval("website") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox runat="server" ID="EditWebsite" Text='<%# Bind("website") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertWebsite" Text='<%# Bind("website") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Pakke"> 
        <ItemTemplate> 
         <%# Eval("pakke") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox runat="server" ID="EditPakke" Text='<%# Bind("pakke") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertPakke" Text='<%# Bind("pakke") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Oprettelsesdato"> 
        <ItemTemplate> 
         <%# Eval("oprettelsesdato") %> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox runat="server" ID="EditOprettelsesdato" Text='<%# Bind("oprettelsesdato") %>' /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox runat="server" ID="InsertOprettelsesdato" Text='<%# Bind("oprettelsesdato") %>' /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Commands"> 
        <ItemTemplate> 
         <asp:Button runat="server" ID="Edit" Text="Edit" CommandName="Edit" /> 
         <asp:Button runat="server" ID="Delete" Text="Delete" CommandName="Delete" /> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:Button runat="server" ID="Update" Text="Update" CommandName="Update" /> 
         <asp:Button runat="server" ID="Cancel" Text="Cancel" CommandName="Cancel" /> 
        </EditItemTemplate> 
        <FooterTemplate> 
         <asp:Button runat="server" ID="Insert" Text="Insert" CommandName="InsertNew" /> 
         <asp:Button runat="server" ID="Cancel" Text="Cancel" CommandName="CancelNew" /> 
        </FooterTemplate> 
       </asp:TemplateField> 
      </Columns> 
      <EmptyDataTemplate> 
       Fornavne:<asp:TextBox runat="server" ID="NoDataFornavn" /> 
       Efternavn:<asp:TextBox runat="server" ID="NoDataEfternavn" /> 
       Firma:<asp:TextBox runat="server" ID="NoDataFirma" /> 
       Website:<asp:TextBox runat="server" ID="NoDataWebsite" /> 
       Pakke:<asp:TextBox runat="server" ID="NoDataPakke" /> 
       Oprettelsesdato:<asp:TextBox runat="server" ID="NoDataOprettelsesdato" /> 
       <asp:Button runat="server" ID="NoDataInsert" CommandName="NoDataInsert" Text="Insert" /> 
      </EmptyDataTemplate> 
     </asp:GridView> 
     <asp:SqlDataSource ID="kundeDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:minConnectionString %>" 
      SelectCommand="SELECT * FROM [kunder]" 
      InsertCommand="Insert into kunder (fornavn, efternavn, firma, website, pakke, oprettelsesdato) values (@fornavn, @efternavn, @firma, @website, @pakke, @oprettelsesdato)" 
      UpdateCommand="Update kunder set [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] where [email protected]" 
      DeleteCommand="Delete from kunder where [email protected]" 
      oninserting="Sqldatasource1_Inserting" 
      OnInserted="Sqldatasource1_Inserted"> 
      </asp:SqlDataSource> 
    </div> 
    </form> 
</body> 
</html> 

kunder.aspx.cs:

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Data.Common; 

public partial class Secure_kunder : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    // here we keep the SqlParameters that we will use to insert new row 
    private List<SqlParameter> insertParameters = new List<SqlParameter>(); 

    protected void Customers_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "NoDataInsert") 
     { 
      TextBox Fornavn = KundeGrid.Controls[0].Controls[0].FindControl("NoDataFornavn") as TextBox; 
      TextBox Efternavn = KundeGrid.Controls[0].Controls[0].FindControl("NoDataEfternavn") as TextBox; 
      TextBox Firma = KundeGrid.Controls[0].Controls[0].FindControl("NoDataFirma") as TextBox; 
      TextBox Website = KundeGrid.Controls[0].Controls[0].FindControl("NoDataWebsite") as TextBox; 
      TextBox Pakke = KundeGrid.Controls[0].Controls[0].FindControl("NoDataPakke") as TextBox; 
      TextBox Oprettelsesdato = KundeGrid.Controls[0].Controls[0].FindControl("NoDataOprettelsesdato") as TextBox; 

      SqlParameter forn = new SqlParameter("@fornavn", SqlDbType.VarChar, 100); 
      forn.Direction = ParameterDirection.Input; 
      forn.Value = Fornavn.Text.ToString(); 
      insertParameters.Add(forn); 

      SqlParameter efte = new SqlParameter("@efternavn", SqlDbType.VarChar, 100); 
      efte.Direction = ParameterDirection.Input; 
      efte.Value = Efternavn.Text; 
      insertParameters.Add(efte); 

      SqlParameter firm = new SqlParameter("@firma", SqlDbType.VarChar, 100); 
      firm.Direction = ParameterDirection.Input; 
      firm.Value = Firma.Text; 
      insertParameters.Add(firm); 

      SqlParameter webs = new SqlParameter("@website", SqlDbType.VarChar, 100); 
      webs.Direction = ParameterDirection.Input; 
      webs.Value = Website.Text; 
      insertParameters.Add(webs); 

      SqlParameter pakk = new SqlParameter("@pakke", SqlDbType.VarChar, 100); 
      pakk.Direction = ParameterDirection.Input; 
      pakk.Value = Pakke.Text; 
      insertParameters.Add(pakk); 

      SqlParameter opre = new SqlParameter("@oprettelsesdato", SqlDbType.VarChar, 100); 
      opre.Direction = ParameterDirection.Input; 
      opre.Value = Oprettelsesdato.Text; 
      insertParameters.Add(opre); 

      kundeDataSource.Insert(); 
     } 
     else if (e.CommandName == "InsertNew") 
     { 

      TextBox Fornavn = KundeGrid.FooterRow.FindControl("InsertFornavn") as TextBox; 
      TextBox Efternavn = KundeGrid.FooterRow.FindControl("InsertEfternavn") as TextBox; 
      TextBox Firma = KundeGrid.FooterRow.FindControl("InsertFirma") as TextBox; 
      TextBox Website = KundeGrid.FooterRow.FindControl("InsertWebsite") as TextBox; 
      TextBox Pakke = KundeGrid.FooterRow.FindControl("InsertPakke") as TextBox; 
      TextBox Oprettelsesdato = KundeGrid.FooterRow.FindControl("InsertOprettelsesdato") as TextBox; 

      SqlParameter forn = new SqlParameter("@fornavn", SqlDbType.VarChar, 100); 
      forn.Direction = ParameterDirection.Input; 
      forn.Value = Fornavn.Text; 
      insertParameters.Add(forn); 

      SqlParameter efte = new SqlParameter("@efternavn", SqlDbType.VarChar, 100); 
      efte.Direction = ParameterDirection.Input; 
      efte.Value = Efternavn.Text; 
      insertParameters.Add(efte); 

      SqlParameter firm = new SqlParameter("@firma", SqlDbType.VarChar, 100); 
      firm.Direction = ParameterDirection.Input; 
      firm.Value = Firma.Text; 
      insertParameters.Add(firm); 

      SqlParameter webs = new SqlParameter("@website", SqlDbType.VarChar, 100); 
      webs.Direction = ParameterDirection.Input; 
      webs.Value = Website.Text; 
      insertParameters.Add(webs); 

      SqlParameter pakk = new SqlParameter("@pakke", SqlDbType.VarChar, 100); 
      pakk.Direction = ParameterDirection.Input; 
      pakk.Value = Pakke.Text; 
      insertParameters.Add(pakk); 

      SqlParameter opre = new SqlParameter("@oprettelsesdato", SqlDbType.VarChar, 100); 
      opre.Direction = ParameterDirection.Input; 
      opre.Value = Oprettelsesdato.Text; 
      insertParameters.Add(opre); 

      kundeDataSource.Insert(); 
     } 
    } 

    protected void Sqldatasource1_Inserting(object sender, SqlDataSourceCommandEventArgs e) 
    { 
     e.Command.Parameters.Clear(); 
     foreach (SqlParameter p in insertParameters) 
      e.Command.Parameters.Add(p); 
    } 

    protected void Sqldatasource1_Inserted(object sender, SqlDataSourceStatusEventArgs e) 
    { 
     insertParameters.Clear(); 
    } 
} 

回答

3

tex TBOX名爲頁面InsertFirstName

<asp:TextBox runat="server" ID="InsertFirstName" Text='<%# Bind("fornavn") %>' /> 

您嘗試使用InsertFornavn找到它:

TextBox Fornavn = KundeGrid.FooterRow.FindControl("InsertFornavn") as TextBox; 

你有同樣的事情InsertLastNameInsertEfternavn

+0

我相信他可能要查找的字段實際上是「InsertFirstName」,因爲其餘元素是通過「FooterTemplate」中的元素找到的。但答案是正確的,因爲他正在尋找一個不存在的領域。 –

+0

@MikeMcCaughan:是的,你是對的,那很可能是正確的控制。通過控件查看我也發現了同名的姓氏。 :) – Guffa

+0

啊啊這樣一個愚蠢的錯誤!非常感謝您的參與! –

相關問題