2013-09-08 9 views
7

ich eine Klasse mit diesem Code gemacht haben:Hinzufügen neuer Zeilendaten gridview asp.net C#

public class Customer 
{ 
    public Customer() { } 
    public Customer(Customer cust) 
    { 
     ID = cust.ID; 
     Name = cust.Name; 
     FatherName = cust.FatherName; 
     Email = cust.Email; 
    } 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string FatherName { get; set; } 
    public string Email { get; set; } 
} 

und diese Funktion erstellt Liste mit einigen Daten laden:

public List<Customer> Generate_Data() 
{ 
    List<Customer> lstCustomer = new List<Customer>(); 
    Customer customer = new Customer(); 

    customer.ID = 1; 
    customer.Name = "John Cena"; 
    customer.FatherName = "John"; 
    customer.Email = "[email protected]"; 
    lstCustomer.Add(new Customer(customer)); 

    customer.ID = 2; 
    customer.Name = "Mokesh"; 
    customer.FatherName = "Rajnikant"; 
    customer.Email = "[email protected]"; 
    lstCustomer.Add(new Customer(customer)); 

    customer.ID = 3; 
    customer.Name = "Bilal Ahmad"; 
    customer.FatherName = "Kashif"; 
    customer.Email = "[email protected]"; 
    lstCustomer.Add(new Customer(customer)); 

    customer.ID = 4; 
    customer.Name = "Chin Shang"; 
    customer.FatherName = "Shang Woe"; 
    customer.Email = "[email protected]"; 
    lstCustomer.Add(new Customer(customer)); 

    return lstCustomer; 
} 

Rückkehr dieses Liste mit dem Gitter zu binden. Der Code ist:

List<Customer> lstCustomer = new List<Customer>(); 
lstCustomer = Generate_Data(); 
GridView1.DataSource = lstCustomer; 
GridView1.DataBind(); 

Meine Fragen sind:

  1. Ich habe 4 Textfelder und eine Schaltfläche, um eine aspx Seite mit den Namen: Id,Name,FatherName,Email Wenn ich auf die Schaltfläche klicken, ich möchte hinzufügen neue Werte der Textfelder in der Zeile gridview1. Ich möchte eine Zeile dynamisch zur Gridview hinzufügen.

  2. Wenn ich eine leere Gridview definieren, wie kann ich meine Textbox Werte gridview Zeilen hinzufügen? Ist die Methode mit Frage1 nicht gleich?

Antwort

5

ASPX:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox><br /> 
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 
<asp:GridView ID="GridView1" runat="server"/> 

-Code hinter:

public class Customer 
{ 
    public Customer() { } 
    public Customer(Customer cust) 
    { 
     ID = cust.ID; 
     Name = cust.Name; 
     FatherName = cust.FatherName; 
     Email = cust.Email; 
    } 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string FatherName { get; set; } 
    public string Email { get; set; } 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    List<Customer> lstCustomer = new List<Customer>(); 
    if (Session["dt"] != null) 
    { 
     lstCustomer = (List<Customer>)Session["dt"]; 
    } 
    Customer customer = new Customer(); 
    customer.ID = int.Parse(TextBox1.Text); 
    customer.Name = TextBox2.Text; 
    customer.FatherName = TextBox2.Text; 
    customer.Email = TextBox2.Text; 
    lstCustomer.Add(new Customer(customer)); 
    GridView1.DataSource = lstCustomer; 
    GridView1.DataBind(); 
    Session["dt"] = lstCustomer; 
} 

aktualisiert!

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     List<Customer> lstCustomer = new List<Customer>(); 
     Customer customer = new Customer(); 

     customer.ID = 1; 
     customer.Name = "John Cena"; 
     customer.FatherName = "John"; 
     customer.Email = "[email protected]"; 
     lstCustomer.Add(new Customer(customer)); 

     customer.ID = 2; 
     customer.Name = "Mokesh"; 
     customer.FatherName = "Rajnikant"; 
     customer.Email = "[email protected]"; 
     lstCustomer.Add(new Customer(customer)); 

     customer.ID = 3; 
     customer.Name = "Bilal Ahmad"; 
     customer.FatherName = "Kashif"; 
     customer.Email = "[email protected]"; 
     lstCustomer.Add(new Customer(customer)); 

     customer.ID = 4; 
     customer.Name = "Chin Shang"; 
     customer.FatherName = "Shang Woe"; 
     customer.Email = "[email protected]"; 
     lstCustomer.Add(new Customer(customer)); 
     Session["dt"] = lstCustomer; 

    } 
} 
+0

Wenn ich Schaltfläche hinzufügen klicken, erste Liste gelöscht und neue Zeilendaten hinzugefügt. Wie kann ich die erste Liste speichern? –

+0

@a_ahmadi meine Antwort aktualisiert. füge die erste Liste zu pageLoad hinzu. –

+0

Sehr gut @ samiey-Mehdi, Danke. –

0

Sie könnten einfach AutoGenerateInsertButton="True" zum <asp:GridView> Tag hinzuzufügen.

+0

Ihre Antwort auf meine Frage nicht gelöst! –

0

So würde ich es so machen. Erstens würde ich den Umfang von lstCustomer so erweitern, dass Postbacks bestehen bleiben.

dann in die Schaltfläche Event-Handler, würde ich so etwas wie dieses

//Here we create the object 
Customer customer = new Customer(); 
customer.foo = txtFoo.Text; 
customer.bar = txtBar.Text; 
//.... 

//Then we add it to the list 
lstCustomer.Add(customer); 

//and databind on it again 
GridView1.DataSource = lstCustomer; 
GridView1.DataBind(); 

schreiben Dies hilft auch, wenn Sie einige Dinge auf den Daten der Benutzer ausführen lassen wollen (oder Sie wollen in der Datenbank persistieren oder so).

+0

Ihre Antwort auf meine Frage nicht gelöst! –

2

Sie benötigen, um Ihre Sammlung während Postbacks beharren. Je nachdem, wie groß Ihre Sammlung ist man bedenkt, kann es in Ansichtszustand zu halten, Sitzung usw.

List<Customer> lstCustomer = new List<Customer>(); 
lstCustomer = Generate_Data(); 
ViewState["Customers"] = lstCustomer; 
GridView1.DataSource = lstCustomer; 
GridView1.DataBind(); 

Also, wenn der Benutzer die Textfelder mit Daten füllt und leitet einen Postback, können Sie ein neues Kunden-Objekt erstellen, und fügen Sie zur bestehenden Sammlung. Binden Sie die Daten anschließend erneut an das Raster.

Customer customer = new Customer(){ID=int.Parse(TextBox1.Text), Name = TextBox2.Text, 
    FatherName = TextBox2.Text, Email = TextBox2.Text } 
var lstCustomer = ViewState["Customers"] as List<Customers>; 
    lstCustomer.Add(customer); 

Hinweis müssen Sie das [Serializable] Attribut auf Ihre Customer Klasse hinzuzufügen.

+0

Wenn ich auf die Schaltfläche "Hinzufügen" klicke, listet die Liste zuerst gelöschte und neue Zeilendaten auf. Wie kann ich die erste Liste speichern? –

+1

ViewState ["Kunden"] = lstCustomer; speichert die Sammlung im Ansichtszustand. Wenn Sie neue Daten hinzufügen, ziehen Sie zuerst die Sammlung aus Viewstate und fügen dann den neuen Kunden hinzu (zweiter Codeblock). – NoviceProgrammer