2013-09-08 15 views
7

Ho fatto una classe con questo codice:Aggiungere nuovi dati fila di 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; } 
} 

e ha creato questa funzione per caricare l'elenco con alcuni dati:

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; 
} 

tornare questo lista per legare con la griglia. Il codice è:

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

Le mie domande sono:

  1. ho aggiunto 4 caselle di testo e un pulsante per una pagina aspx con i nomi: Id,Name,FatherName,Email Quando clicco sul pulsante, voglio aggiungere il nuovi valori delle caselle di testo alla riga gridview1. Voglio aggiungere una riga alla griglia in modo dinamico.

  2. Se definisco un gridview vuoto, come posso aggiungere i miei valori di textbox alle righe di gridview? Non è uguale il metodo con question1?

risposta

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"/> 

codice dietro:

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; 
} 

Aggiornato!

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

Quando faccio clic sul pulsante aggiungi, il primo elenco viene cancellato e vengono aggiunti nuovi dati di riga. Come posso memorizzare il primo elenco? –

+0

@a_ahmadi la mia risposta è stata aggiornata. aggiungi il primo elenco a pagina Carica. –

+0

Molto bene @ samiey-mehdi, grazie. –

0

Si potrebbe semplicemente aggiungere AutoGenerateInsertButton="True" al tag <asp:GridView>.

+0

la tua risposta non ha risolto la mia domanda! –

0

Quindi, lo farei così. Innanzitutto estenderei l'ambito di lstCustomer in modo che permanga attraverso i postback.

Poi nel gestore di eventi tasto, mi piacerebbe scrivere qualcosa di simile

//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(); 

Questo aiuta anche se si vuole permettere all'utente di eseguire alcune cose sui dati (o se si vuole persistere al database o qualcosa).

+0

la tua risposta non ha risolto la mia domanda! –

2

Sarà necessario persistere vostra collezione durante il postback. A seconda di quanto è grande la vostra collezione è che si può prendere in considerazione tenendolo in ViewState, seduta, ecc

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

Così, quando l'utente compila caselle di testo con i dati e avvia un postback, è possibile creare un nuovo oggetto del cliente e aggiungerlo alla collezione esistente. Quindi rebind i dati nella griglia.

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); 

Nota sarà necessario aggiungere l'attributo [Serializable] alla classe Customer.

+0

Quando faccio clic sul pulsante aggiungi, il primo elenco viene cancellato e vengono aggiunti nuovi dati di riga. Come posso memorizzare il primo elenco? –

+1

ViewState ["Clienti"] = lstCustomer; memorizzerà la raccolta nel viewstate. quindi quando aggiungi nuovi dati, per prima cosa estrai la raccolta dal Viewstate e poi aggiungi il nuovo cliente ad essa (secondo blocco di codice) – NoviceProgrammer

Problemi correlati