Click here to Skip to main content
15,898,222 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
i want to add more records in a viewstate, after compiling to end till DataBind(). the code works fine, but when i again start the process, it remove the previous record from view state, i want view state to be merged not override any ideas..


C#
CheckBox cBox2 = null;
            for (int i = 0; i < lvItemTone2.Items.Count(); i++)
            {
                cBox2 = (CheckBox)lvItemTone2.Items[i].FindControl("lvTone2chckSelect");
                if (cBox2.Checked)
                {
                    ItemCode = ((DropDownList)GridView1.FooterRow.FindControl("ddlItemCode")).SelectedItem.Text.ToString();
                    BatchNo = ((Label)lvItemTone2.Items[i].FindControl("lblBatchNo")).Text;
                    Quantity = ((Label)lvItemTone2.Items[i].FindControl("lblQty")).Text;
                    SelectedQuantity = ((Label)lvItemTone2.Items[i].FindControl("lblSelQty")).Text;

                    dr = dt.NewRow();
                    dr["ItemCode"] = ItemCode;
                    dr["BatchNo"] = BatchNo;
                    dr["Quantity"] = Quantity;
                    dr["SelectedQuantity"] = SelectedQuantity;
                    
                    if (dr != null)
                    {
                        dt.Rows.Add(dr);
                    }
                }
            }
            ViewState["BatchTable"] = dt;
            lvItemTone2.DataSource = dt;
            lvItemTone2.DataBind();
Posted
Updated 6-Oct-13 23:48pm
v2
Comments
xibit89 7-Oct-13 5:49am    
Azee what u have Edited?
Azee 7-Oct-13 5:52am    
Just the formatting, nothing to worry :)
xibit89 7-Oct-13 6:01am    
Okay. :)

Hey there,

You need check if the DataTable exists in the ViewState, if yes then use that one instead of creating a new one every time. Use something like this after creating the DataTable object somewhere above for loop (You didn't post that part), that way will adding Rows to previously saved DataTable in the ViewState:

C#
if(ViewState["BatchTable"] != null)
{
    dt = (DataTable)ViewState["BatchTable"];
}


Hope it helps, do let me know if it isn't what you were looking for.

Azee...
 
Share this answer
 
v2
1. copy the viewstate previous data into a datatable named(preDt).
2. merge the new datatable (newDt) with preDt.
3. now set the output result to view state.
 
Share this answer
 
v2
Comments
xibit89 7-Oct-13 6:11am    
can u tell how to copy previous data?
create your viewstate at load time like this
C#
protected void Page_Load(object sender, EventArgs e)
       {
if (!IsPostBack)
           {
datatatle dt=new DataTable();
dt.column.add("BatchNo");
dt.column.add("ItemCode");
dt.column.add("Quantity");
dt.column.add("SelectedQuantity");

ViewState["data"]=dt;
}
}

put your code like this

CheckBox cBox2 = null;
DataTable dt=ViewsState["data"] as DataTable;
            for (int i = 0; i < lvItemTone2.Items.Count(); i++)
            {
                cBox2 = (CheckBox)lvItemTone2.Items[i].FindControl("lvTone2chckSelect");
                if (cBox2.Checked)
                {
                    ItemCode = ((DropDownList)GridView1.FooterRow.FindControl("ddlItemCode")).SelectedItem.Text.ToString();
                    BatchNo = ((Label)lvItemTone2.Items[i].FindControl("lblBatchNo")).Text;
                    Quantity = ((Label)lvItemTone2.Items[i].FindControl("lblQty")).Text;
                    SelectedQuantity = ((Label)lvItemTone2.Items[i].FindControl("lblSelQty")).Text;
 
                    dr = dt.NewRow();
                    dr["ItemCode"] = ItemCode;
                    dr["BatchNo"] = BatchNo;
                    dr["Quantity"] = Quantity;
                    dr["SelectedQuantity"] = SelectedQuantity;
                    
                    if (dr != null)
                    {
                        dt.Rows.Add(dr);
                    }
                }
            }
            //ViewState["BatchTable"] = dt;
            lvItemTone2.DataSource = dt;
            lvItemTone2.DataBind();


this code definitely work for you
 
Share this answer
 
v2
DataTable dt = (DataTable)ViewState["committeeDetails"];
if (dt.Rows.Count > 0)
{
ViewState["count"] = dt.Rows.Count;

}
else
{
ViewState["count"] = 0;
btnSubmit.Visible = false;
}
//dt.Rows.Clear();

int i = Convert.ToInt16(ViewState["count"]);
//i++;
//dt.NewRow();
DataRow dr1 = dt.NewRow();
DateTime formDate;
DateTime validDate;
string formdate1 = "", validDate1 = "";
if (txtFormationDate.Text == "")
{
formDate = DateTime.ParseExact("01/01/1900", "dd/MM/yyyy", null);
//formdate1 = formDate.ToString("dd/MM/yyyy");
}
else
{
formDate = DateTime.ParseExact(txtFormationDate.Text, "dd/MM/yyyy", null);
// formdate1 = formDate.ToString("dd/MM/yyyy");
}
if (txtValidTill.Text == "")
{
validDate = DateTime.ParseExact("01/01/1900", "dd/MM/yyyy", null);
//validDate1 = validDate.ToString("dd/MM/yyyy");
}
else
{
validDate = DateTime.ParseExact(txtValidTill.Text, "dd/MM/yyyy", null);
// validDate1 = validDate.ToString("dd/MM/yyyy");
}
dr1["ColumnName"] = formDate;
dr1["ColumnName"] = validDate;
dr1["ColumnName"] = txtMemberName.Text;
dr1["ColumnName"] = txtDesignation.Text.Trim();
dr1["ColumnName"] = txtContact.Text.Trim();
dt.Rows.Add(dr1);
ViewState["count"] = i + 1;
ViewState["committeeDetails"] = dt;

grdCommittee.DataSource = (DataTable)ViewState["committeeDetails"];
grdCommittee.DataBind();
 
Share this answer
 
C#
if (ViewState["BatchTable"] != null)
           {
               if (((DataTable)ViewState["BatchTable"]).Rows.Count > 0)
               {
                   dt = (DataTable)ViewState["BatchTable"];
               }
           }
           dr = dt.NewRow();

           for (int i = 0; i < lvItemTone2.Items.Count(); i++)
           {
               ItemCode = ((DropDownList)GridView1.FooterRow.FindControl("ddlItemCode")).SelectedItem.Text.ToString();
               BatchNo = ((Label)lvItemTone2.Items[i].FindControl("lblBatchNo")).Text;
               Quantity = ((Label)lvItemTone2.Items[i].FindControl("lblQty")).Text;
               SelectedQuantity = ((Label)lvItemTone2.Items[i].FindControl("lblSelQty")).Text;

               dr = dt.NewRow();
               dr["ItemCode"] = ItemCode;
               dr["BatchNo"] = BatchNo;
               dr["Quantity"] = Quantity;
               dr["SelectedQuantity"] = SelectedQuantity;

               if (dr != null)
               {
                   dt.Rows.Add(dr);
               }
           }


           ViewState["BatchTable"] = dt;

           lvItemTone2.DataSource =  dt.Select("itemCode = '" + ItemCode + "'").CopyToDataTable();
           lvItemTone2.DataBind();
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900