-3

いくつかのテキストボックスとボタンを作成しました。ボタンを押すと、グリッドビューにすべての新しいレコードを表示したいのですが、レコードを追加する場合にのみ作成し、再度追加すると古いレコードが消えて新しいレコードが表示されます。

var dt = new DataTable();

        DataColumn cl = new DataColumn("From");
        dt.Columns.Add(cl);
        cl = new DataColumn("To");
        dt.Columns.Add(cl);

        DataColumn cl1 = new DataColumn("Area");
        dt.Columns.Add(cl1);
        cl1 = new DataColumn("Sector");
        dt.Columns.Add(cl1);

        DataColumn cl2 = new DataColumn("CompanyName");
        dt.Columns.Add(cl2);
        cl2 = new DataColumn("Description");
        dt.Columns.Add(cl2);

        DataRow dr = dt.NewRow();
        dr[0] = TextBoxFrom.Text;
        dr[1] = TextBoxTo.Text;
        dr[2] = TextBoxArea.Text;
        dr[3] = TextBoxSector.Text;
        dr[4] = TextBoxCompanyName.Text;
        dr[5] = TextBoxDescription.Text;
        dt.Rows.Add(dr);


        GridViewAllAssigments.DataSource = dt;
        GridViewAllAssigments.DataBind();
4

2 に答える 2

2

まずDataTable、GridView をバインドするのではなく、データを保持するクラスを作成することをお勧めします。

public class MyData
{
    public string From { get; set; }
    public string To { get; set; }
    public string Area { get; set; }
    public string Sector { get; set; }
    public string CompanyName { get; set; }
    public string Description { get; set; }
}

セッション変数でデータを維持する必要があるため、ポストバックごとにデータが失われることはありません。

public List<MyData> MyData
{
    get
    {
        if (Session["MyData"] == null)
            return new List<MyData>();

        return (List<MyData>)Session["MyData"];
    }
    set
    {
        Session["MyData"] = value;
    }
}

コントロールから値を取得するときは、次を使用します。

var myData = this.MyData;
myData.Add(new MyData() { 
        Area = TextBoxArea.Text, 
        CompanyName = TextBoxCompanyName.Text, 
        Description = TextBoxDescription.Text, 
        From = TextBoxFrom.Text, 
        Sector = TextBoxSector.Text, 
        To = TextBoxTo.Text 
    });

this.MyData = myData;           

GridViewAllAssigments.DataSource = this.MyData;
GridViewAllAssigments.DataBind();
于 2013-03-21T14:30:47.867 に答える
1

毎回 DataTable の新しいインスタンスを作成してから新しい行を追加しているため、コードは機能しません。

これを機能させるには、DataTableを一度作成し、既存の DataTable に行を追加して再バインドする必要があります。

このようなもの:

DataTable dt = Session["DT"]  as DataTable;
if(dt==null)
{
   dt = new DataTable(); 
   Session["DT"]=dt;//store it for next round trip
}

//rest of your code code to add a new row...

GridViewAllAssigments.DataSource = dt;
GridViewAllAssigments.DataBind();
于 2013-03-21T14:21:30.773 に答える