2014-12-24 28 views
0

На самом деле я создал один объект сеанса, и я храню несколько текстовых полей, радио & значение флажка в этом сеансе.Динамически создавая сеанс на кнопке Нажмите

Вот мой код (Моя страница вставки, где я буду вставлять значения и хранить в сеансе).

protected void btnRegister_Click(object sender, EventArgs e) 
{ 
    //Creating DataTable dt 
    DataTable dt = new DataTable(); 

    //Creating DataTable Columns 
    dt.Columns.Add("FName", typeof(string)); 
    dt.Columns.Add("MName", typeof(string)); 
    dt.Columns.Add("LName", typeof(string)); 
    dt.Columns.Add("Phone", typeof(string)); 
    dt.Columns.Add("EId", typeof(string)); 
    dt.Columns.Add("State", typeof(string)); 
    dt.Columns.Add("City", typeof(string)); 
    dt.Columns.Add("Country", typeof(string)); 
    dt.Columns.Add("PCode", typeof(string)); 
    dt.Columns.Add("Gender", typeof(string)); 
    dt.Columns.Add("AOI", typeof(string)); 

    dt.Rows.Add(txtFN.Text, txtMN.Text, txtLN.Text, txtPhone.Text, txtEId.Text, ddlState.Text, ddlCity.Text, txtCountry.Text, txtPCode.Text, rdGender.SelectedValue, cbAOI.SelectedValue); 

    //Creating Session object to store DataTable dt 
    Session.Add("Insert", dt); 

    lblMandatory.Text = "Successfully Inserted into Database"; 
    System.Threading.Thread.Sleep(1000); 
    Response.Redirect("Home.aspx"); 
} 

Я просто хотел бы знать, есть ли способ, чтобы создать новую сессию всякий раз, когда я нажмите кнопку Зарегистрировать ИЭ, я не хочу, чтобы перезаписать существующий сеанс, но при каждом нажатии кнопки, я хочу, чтобы создать новую сессию автоматически.

My Home Page, где я буду показывать это DataTable с помощью GridView

protected void Page_Load(object sender, EventArgs e) 
{ 
    if ((!IsPostBack) && (Session["Insert"] != null)) 
    { 
     //At another place you retrieve datatable: 
     DataTable dt = new DataTable();    
     dt = (DataTable)Session["Insert"]; 

     //Binding GridView with DataTable dt 
     gdvView.DataSource = dt; 
     gdvView.DataBind(); 
    } 
} 

Моя проблема в том, колонка каждый GridView заменяются новыми GridView колонки, так как моя сессия заменяются новыми значениями. Итак, есть ли способ, я могу сохранить новое значение сеанса в gridview, не теряя прежних значений из gridview.

+1

Ваш код Session.Add() не проверяет существующий сеанс. Просто используйте Session ["insert"] = dt, затем управляйте dt, чтобы каждый раз добавлять новые строки. Затем используйте dt, чтобы проверить счетчик как dt.Rows.Count или ((DataTable) Session ["insert"]). Count – agentpx

+0

С помощью agentpx это помогло, но все же я хочу знать, как автоматически создавать объект сеанса. В вышеприведенном коде сначала создается сеанс ["insert"] при нажатии кнопки. Но я действительно хочу, если в следующий раз я нажму кнопку, он должен создать новый сеанс с другим идентификатором или объектом. Так что, наконец, я могу иметь несколько сеансов, сгенерированных автоматически при каждом нажатии кнопки. –

+0

Session.Add ("Insert" + txtEId.Text.Trim(), dt); – agentpx

ответ

0

Хорошо, теперь я понимаю, в чем проблема.

Вам не нужно создавать новый сеанс каждый раз

здесь является сниппеты;

DataTable dt; 
if (Session["Insert"]_== null) //or nothing 
    { 
    dt = new DataTable(); 
    } 
    else 
    { 
    dt = (DataTable)Session["Insert"]; 

    } 

    //Add to dt.Rows here 
    //Save it again to Session["Insert"] 
    //Then bind dt to GridView again 

This way you won't need new sessions and your dt data is retained, 
+0

Можете ли вы внести изменения в мой код, который я дал выше, чтобы я мог его понять. Благодарю. –

+0

Хорошо, всего лишь минут ... – agentpx

0
//Creating DataTable dt 
DataTable dt = new DataTable(); //Declare dt only once. If this wont work put it in a get set property. 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if ((!IsPostBack) 
    { 
     CreateDataTable(); 
     LoadDataTable(); 
    } 

    gdvView = Nothing; //or Null; 
    gdvView.DataSource = dt; 
    gdvView.DataBind(); 

} 

protected void CreateDataTable() 
{ 

//Creating DataTable Columns 
    dt.Columns.Add("FName", typeof(string)); 
    dt.Columns.Add("MName", typeof(string)); 
    dt.Columns.Add("LName", typeof(string)); 
    dt.Columns.Add("Phone", typeof(string)); 
    dt.Columns.Add("EId", typeof(string)); 
    dt.Columns.Add("State", typeof(string)); 
    dt.Columns.Add("City", typeof(string)); 
    dt.Columns.Add("Country", typeof(string)); 
    dt.Columns.Add("PCode", typeof(string)); 
    dt.Columns.Add("Gender", typeof(string)); 
    dt.Columns.Add("AOI", typeof(string)); 

} 

protected void LoadDataTable() 
{ 
    if ((Session["Insert"] == null) //or (Session["Insert"] == nothing) 
    { 
     Session.Add("Insert", dt); 
    } 
    else { 
     dt = (DataTable)Session["Insert"]; 
    { 
} 

protected void btnRegister_Click(object sender, EventArgs e) 
{ 

//Do whatever you need to do as is 
dt.Rows.Add(txtFN.Text, txtMN.Text, txtLN.Text, txtPhone.Text, txtEId.Text,  ddlState.Text, ddlCity.Text, txtCountry.Text, txtPCode.Text, rdGender.SelectedValue, cbAOI.SelectedValue); 

LoadDataTable(); 

/* Remove this block if you don't need it here */ 
    gdvView = Nothing; //or Null; 
    gdvView.DataSource = dt; 
    gdvView.DataBind(); 
/* Remove this block if you don't need it here */ 

lblMandatory.Text = "Successfully Inserted into Database"; 
System.Threading.Thread.Sleep(1000); 
Response.Redirect("Home.aspx"); 
} 
0

Вы можете попробовать следующий код. Здесь я тестирую, если в этом сеансе уже есть значение «Вставить». Если да, к нему добавляется новая строка, в противном случае создается новый DataTable.

protected void btnRegister_Click(object sender, EventArgs e) 
{ 
    //Creating DataTable dt 

DataTable dt; 
if (Session["Insert"] == null) //or nothing 
{ 
    dt = new DataTable(); 

    //Creating DataTable Columns 
    dt.Columns.Add("FName", typeof(string)); 
    dt.Columns.Add("MName", typeof(string)); 
    dt.Columns.Add("LName", typeof(string)); 
    dt.Columns.Add("Phone", typeof(string)); 
    dt.Columns.Add("EId", typeof(string)); 
    dt.Columns.Add("State", typeof(string)); 
    dt.Columns.Add("City", typeof(string)); 
    dt.Columns.Add("Country", typeof(string)); 
    dt.Columns.Add("PCode", typeof(string)); 
    dt.Columns.Add("Gender", typeof(string)); 
    dt.Columns.Add("AOI", typeof(string)); 
} 
else 
{ 
    dt = Session["Insert"] as DataTable; 
} 

    dt.Rows.Add(txtFN.Text, txtMN.Text, txtLN.Text, txtPhone.Text, txtEId.Text, ddlState.Text, ddlCity.Text, txtCountry.Text, txtPCode.Text, rdGender.SelectedValue, cbAOI.SelectedValue); 

    //Creating Session object to store DataTable dt 
    Session["Insert"] = dt; 

    lblMandatory.Text = "Successfully Inserted into Database"; 
    System.Threading.Thread.Sleep(1000); 
    Response.Redirect("Home.aspx"); 
} 
Смежные вопросы