7

私はこのコードでクラスを作りました:

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

そして、いくつかのデータでリストをロードするためにこの関数を作成しました:

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 = "cena@gmail.com";
    lstCustomer.Add(new Customer(customer));

    customer.ID = 2;
    customer.Name = "Mokesh";
    customer.FatherName = "Rajnikant";
    customer.Email = "mokesh@gmail.com";
    lstCustomer.Add(new Customer(customer));

    customer.ID = 3;
    customer.Name = "Bilal Ahmad";
    customer.FatherName = "Kashif";
    customer.Email = "bilal@gmail.com";
    lstCustomer.Add(new Customer(customer));

    customer.ID = 4;
    customer.Name = "Chin Shang";
    customer.FatherName = "Shang Woe";
    customer.Email = "chinshang@gmail.com";
    lstCustomer.Add(new Customer(customer));

    return lstCustomer;
}

このリストを返し、グリッドにバインドします。コードは次のとおりです。

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

私の質問は次のとおりです。

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

  2. 空のグリッドビューを定義した場合、テキストボックスの値をグリッドビューの行に追加するにはどうすればよいですか? question1 と同じ方法ではありませんか?

4

4 に答える 4

6

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 = "cena@gmail.com";
        lstCustomer.Add(new Customer(customer));

        customer.ID = 2;
        customer.Name = "Mokesh";
        customer.FatherName = "Rajnikant";
        customer.Email = "mokesh@gmail.com";
        lstCustomer.Add(new Customer(customer));

        customer.ID = 3;
        customer.Name = "Bilal Ahmad";
        customer.FatherName = "Kashif";
        customer.Email = "bilal@gmail.com";
        lstCustomer.Add(new Customer(customer));

        customer.ID = 4;
        customer.Name = "Chin Shang";
        customer.FatherName = "Shang Woe";
        customer.Email = "chinshang@gmail.com";
        lstCustomer.Add(new Customer(customer));
        Session["dt"] = lstCustomer;

    }
}
于 2013-09-08T07:06:31.340 に答える
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);

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

于 2013-09-08T07:18:25.733 に答える
0

AutoGenerateInsertButton="True"タグに追加するだけです<asp:GridView>

于 2013-09-08T06:50:45.763 に答える
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();

これは、ユーザーがデータに対して何かを実行できるようにする場合 (またはデータベースなどに永続化する場合) にも役立ちます。

于 2013-09-08T06:53:03.040 に答える