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

您必须在 Session 变量中维护数据,这样您就不会在每次回发时丢失数据:

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 回答