2014-09-11 54 views
1

我已经尝试使用DATATABLE来存储整个应用程序的值。我没有使用任何数据库来永久存储值。这是我可以在应用程序中使用的虚拟值。在C#中的数据表中动态添加多行

这个问题实际上是每当向我的DATATABLE中添加一个新的行值时,它就会覆盖DATATABLE中的先前值而不是添加新行。

是否有机会动态地向DATATABLE添加多行,并且我可以在整个应用程序会话中使用它。

**我的注册页面**

public partial class _Default : System.Web.UI.Page 
{ 
    DataTable myDataTable; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     myDataTable = new DataTable(); 
     myDataTable.Columns.Add("username"); 
     myDataTable.Columns.Add("firstname"); 
     myDataTable.Columns.Add("lastname"); 
     myDataTable.Columns.Add("password"); 
     myDataTable.Columns.Add("conpassword"); 
     myDataTable.Columns.Add("email"); 

     myDataTable.Rows.Add("kavi1", "kavi", "rajan", "123456", "123456", "[email protected]"); 
     myDataTable.Rows.Add("sri1", "sri", "prem", "123456", "123456", "[email protected]"); 
     myDataTable.Rows.Add("mani1", "mani", "vanan", "123456", "123456", "[email protected]"); 
     HttpContext.Current.Session["name"] = myDataTable; 

     if (!IsPostBack) 
     { 


      if (Session["name"] != null) 
      { 

       myDataTable = Session["name"] as DataTable; 

      } 
     } 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 

     myDataTable.Rows.Add(new object []{ TextBox1.Text ,TextBox2.Text,TextBox3.Text , TextBox4.Text,TextBox5.Text ,TextBox6.Text }); 
     HttpContext.Current.Session["name"] = myDataTable; 

     if (Session["name"] != null) 
     { 
      Response.Write("success"); 

     } 

    } 

我的登录页面

public partial class login : System.Web.UI.Page 
{ 
    DataTable dtResult; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     dtResult = (DataTable)Session["name"]; 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 


     for (int i = 0; i < dtResult.Rows.Count; i++) 
     { 

      string un = dtResult.Rows[i].Field<string>("username"); 
      string fn = dtResult.Rows[i].Field<string>("password"); 


      if (TextBox1.Text == un && TextBox2.Text == fn) 
      { 
       //Response.Write("success"); 
       Response.Redirect("home.aspx"); 
      } 

     } 


    } 
+0

是它解决,或者您还有问题? – 2014-09-11 07:35:36

+0

没有解决。 。 – 2014-09-12 09:39:34

回答

3

问题:

在每一个Postback要创建一个新datatable,并覆盖到以前:

protected void Page_Load(object sender, EventArgs e) 
    { 
     myDataTable = new DataTable(); 
     //.... 
     HttpContext.Current.Session["name"] = myDataTable; //overriding to the previous 

所以,当你点击按钮添加新行,回发,并重新创建一个新的DataTable,然后添加一个新行到该表。

解决方案:

你只需要修改Page_Load事件处理程序:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["name"] != null) //this is you have to do at every postback 
    { 
     myDataTable = Session["name"] as DataTable; 
    } 

    if (!IsPostBack) 
    { 
     //if it is not post back, create a new DataTable and add values to it 
     myDataTable = new DataTable(); 
     myDataTable.Columns.Add("username"); 
     myDataTable.Columns.Add("firstname"); 
     myDataTable.Columns.Add("lastname"); 
     myDataTable.Columns.Add("password"); 
     myDataTable.Columns.Add("conpassword"); 
     myDataTable.Columns.Add("email"); 

     myDataTable.Rows.Add("kavi1", "kavi", "rajan", "123456", "123456", "[email protected]"); 
     myDataTable.Rows.Add("sri1", "sri", "prem", "123456", "123456", "[email protected]"); 
     myDataTable.Rows.Add("mani1", "mani", "vanan", "123456", "123456", "[email protected]"); 
     HttpContext.Current.Session["name"] = myDataTable; 
    } 
} 
+0

你是对的@shaharyar ...现在它工作正常 – 2014-09-11 07:20:37