2013-09-08 12 views
7

のGridViewのasp.netのC#に新しい行のデータを追加します。グリッドにバインドするリストコードです:私はこのコードを使用してクラスを作った

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

は、私の質問は以下のとおりです。

  1. 私は名前のaspxページに4つのテキストボックスとボタンを追加しました:私はボタンをクリックするとId,Name,FatherName,Email 、私は追加したいですテキストボックスの新しい値をgridview1行に追加します。グリッドビューに動的に行を追加したいと思います。

  2. 空のグリッドビューを定義すると、グリッドビューの行にテキストボックスの値を追加するにはどうすればよいですか?質問1と同じ方法ではないのですか?

答えて

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

コードの後ろには:

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

を更新しました!

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

追加ボタンをクリックすると、最初のリストがクリアされ、新しい行データが追加されます。どのようにして最初のリストを保存できますか? –

+0

@a_ahmadi私の答えが更新されました。最初のリストをpageLoadに追加します。 –

+0

非常に良い@ samiey-mehdi、ありがとう。 –

0

<asp:GridView>タグには、単にAutoGenerateInsertButton="True"を追加できます。

+0

あなたの応答は私の質問を解決していません! –

0

だから、私はこれを好きです。まず、lstCustomerのスコープを広げて、ポストバックを継続するようにします。あなたは、ユーザーがデータにいくつかのことを行うようにしたい(またはデータベースに永続化したい場合は

そして、ボタンイベントハンドラで、私はこの

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

のようなものを書きたいこれも役立ちますか何か)。

+0

あなたの応答は私の質問を解決していません! –

2

あなたがポストバック中にあなたのコレクションを保持する必要があります。あなたのコレクションがあるどのように大きなに応じて、ユーザーがデータとテキストボックスを埋め、ポストバックを開始したときにそう、あなたは新しい顧客オブジェクトを作成し、それを追加することができ

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

など、ビューステート、セッションでそれを保つことを検討することができます既存のコレクションに追加します。次に、データをグリッドに再バインドします。

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

はあなたCustomerクラスに[Serializable]属性を追加する必要があります注意してください。

+0

追加ボタンをクリックすると、最初のリストがクリアされ、新しい行データが追加されます。どのようにして最初のリストを保存できますか? –

+1

ViewState ["Customers"] = lstCustomer;ビューステートにコレクションを格納します。新しいデータを追加するときは、最初にビューステートからコレクションを取り出してから、新しい顧客を追加します(2番目のコードブロック) – NoviceProgrammer

関連する問題