Note that there are some explanatory texts on larger screens.

plurals
  1. POServer.transfer not working correctly
    primarykey
    data
    text
    <p>I have 2 aspx pages. CreateEstimate1.aspx and CreateEstimate2.aspx. If i navigate directly to CreateEstimate2.aspx everything works correctly no problems at all. But if i am on CreateEstimate1.aspx and then have a server.transfer("CreateEstimate2.aspx") i get the weirdest error.</p> <p>I have a radgrid that gets built in Page_init and works fine if i go directly to that page. But as soon as i get transfered to CreateEstimate2.aspx from CreateEstimate1.aspx using server.transfer or response.redirect i get the following error:</p> <p>"Unable to cast object of type 'System.Int32' to type 'System.Data.DataTable'."</p> <h1>CreateEstimate2.aspx</h1> <pre><code>public partial class Admin_CreateEstimate2 : System.Web.UI.Page { invoicer inv = new invoicer(); protected void Page_Init(object sender, EventArgs e) { string ctrlname = this.Page.Request.Params.Get("__EVENTTARGET"); if (Session["Tables"] == null) { Session.Add("Tables", 1); DataTable dt = inv.GetTable(); Session.Add(Session["Tables"].ToString(), dt); inv.DefineGridStructure(1, PlaceHolder2, true); } if (IsPostBack) { ctrlname = ctrlname.Split('$').Last(); int next = Convert.ToInt32(inv.GetSession()); PlaceHolder2.Controls.Clear(); inv.loopGrids(PlaceHolder2); if (ctrlname == "Button1") { next = next + 1; Session.Add("Tables", next); Response.Write("Button getSession: " + inv.GetSession()); DataTable dt = inv.GetTable(); Session.Add(Session["Tables"].ToString(), dt); inv.DefineGridStructure(next, PlaceHolder2, true); } } } protected void Button1_Click(object sender, EventArgs e) { } protected void Button2_Click(object sender, EventArgs e) { inv.PreviewAll(PlaceHolder2); } } </code></pre> <h1>invoicer.cs</h1> <pre><code>public class invoicer { public class MyTemplate : ITemplate { private string colname; protected Label lControl; public MyTemplate(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { lControl = new Label(); lControl.ID = "Label-DurationType"; lControl.DataBinding += new EventHandler(lControl_DataBinding); container.Controls.Add(lControl); } public void lControl_DataBinding(object sender, EventArgs e) { Label l = (Label)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = ((DataRowView)container.DataItem)[colname].ToString() + "&lt;br /&gt;"; } } public class MyEditTemplate : IBindableTemplate { public void InstantiateIn(Control container) { GridEditableItem item = ((GridEditableItem)(container.NamingContainer)); DropDownList drop = new DropDownList(); drop.ID = "DurationType-DDL"; drop.DataSource = (DataTable)GetTableForDropDown(); drop.DataTextField = "DurationType"; drop.DataValueField = "DurationType"; container.Controls.Add(drop); } public System.Collections.Specialized.IOrderedDictionary ExtractValues(System.Web.UI.Control container) { OrderedDictionary od = new OrderedDictionary(); od.Add("DurationType", ((DropDownList)(((GridDataItem)(container)).FindControl("DurationType-DDL"))).DataValueField); return od; } } void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { RadGrid grid = (RadGrid)sender; string id = grid.ID; DataTable current = (DataTable)HttpContext.Current.Session[int.Parse(id.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; grid.DataSource = current; } protected void grid_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) { if (e.Item is GridEditableItem &amp;&amp; e.Item.IsInEditMode) { GridEditableItem editItem = (GridEditableItem)e.Item; DropDownList ddl = (DropDownList)editItem.FindControl("DurationType-DDL"); ddl.DataSource = (DataTable)GetTableForDropDown(); ddl.DataTextField = "DurationType"; ddl.DataValueField = "DurationType"; ddl.SelectedIndex = editItem.ItemIndex; ddl.SelectedValue = DataBinder.Eval(editItem.DataItem, "DurationType").ToString(); // To get the selected value } } public void DefineGridStructure(int i, PlaceHolder ph, Boolean bl) { RadGrid grid = new RadGrid(); grid.ID = "RadGrid" + i.ToString(); grid.Visible = bl; //grid.Height = Unit.Pixel(200); //grid.Height = Unit.Percentage(100); grid.Width = Unit.Pixel(775); grid.NeedDataSource += new GridNeedDataSourceEventHandler(grid_NeedDataSource); grid.AutoGenerateEditColumn = true; grid.AutoGenerateDeleteColumn = true; grid.AllowAutomaticInserts = false; //grid.Width = Unit.Percentage(100); grid.PageSize = 15; grid.AllowPaging = true; grid.AllowFilteringByColumn = false; grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; grid.AutoGenerateColumns = false; //grid.MasterTableView.Width = Unit.Percentage(100); grid.MasterTableView.Width = Unit.Pixel(775); grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.TopAndBottom; grid.AllowAutomaticDeletes = false; grid.AllowAutomaticUpdates = false; grid.ItemDataBound += new GridItemEventHandler(grid_ItemDataBound); grid.InsertCommand += grid_InsertCommand; grid.DeleteCommand += grid_DeleteCommand; grid.UpdateCommand += grid_UpdateCommand; grid.MasterTableView.DataKeyNames = new string[] { "RowNumber" }; GridBoundColumn boundColumn = new GridBoundColumn(); boundColumn.DataField = "RowNumber"; boundColumn.HeaderText = "RowNumber"; boundColumn.ItemStyle.Width = Unit.Pixel(5); boundColumn.ReadOnly = true; boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Size"; boundColumn.HeaderText = "Size"; boundColumn.ItemStyle.Width = Unit.Pixel(5); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Description"; boundColumn.HeaderText = "Description"; boundColumn.ItemStyle.Width = Unit.Pixel(20); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Quantity"; boundColumn.HeaderText = "Quantity"; boundColumn.ItemStyle.Width = Unit.Pixel(5); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Unit"; boundColumn.HeaderText = "Unit"; boundColumn.ItemStyle.Width = Unit.Pixel(5); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(boundColumn); GridAutoCompleteColumn aboundColumn = new GridAutoCompleteColumn(); aboundColumn.DataField = "Duration"; aboundColumn.HeaderText = "Duration"; aboundColumn.DataTextField = "Duration"; aboundColumn.DataValueField = "Duration"; //aboundColumn.AllowCustomEntry = false; //aboundColumn.SelectionMode = RadAutoCompleteSelectionMode.Single; boundColumn.ItemStyle.Width = Unit.Pixel(5); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(aboundColumn); GridTemplateColumn objGridTemplateColumn = new GridTemplateColumn(); objGridTemplateColumn.HeaderText = "DurationType"; objGridTemplateColumn.DataField = "DurationType"; objGridTemplateColumn.ItemTemplate = new MyTemplate("DurationType"); objGridTemplateColumn.EditItemTemplate = new MyEditTemplate(); objGridTemplateColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.Columns.Add(objGridTemplateColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Amount"; boundColumn.HeaderText = "Amount"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn.ItemStyle.Width = Unit.Pixel(10); boundColumn.ItemStyle.CssClass = "maximize"; grid.MasterTableView.EditMode = GridEditMode.InPlace; grid.ItemCreated += grid_ItemCreated; LinkButton lb = new LinkButton(); if (bl == false) { lb.ID = "Show-Grid-" + i.ToString(); lb.Text = "Show Area " + i.ToString(); lb.Click += new EventHandler(ShowGrid); } else { lb.ID = "Show-Grid-" + i.ToString(); lb.Text = "Hide Area " + i.ToString(); lb.Click += new EventHandler(ShowGrid); } LinkButton lbd = new LinkButton(); lbd.ID = "Delete-Grid-" + i.ToString(); lbd.Text = "Delete Area " + i.ToString(); lbd.Click += (sender, e) =&gt; DeleteGrid(sender, e, ph); Label lbl = new Label(); lbl.ID = "Split-" + i.ToString(); lbl.Text = " | "; Label lbb = new Label(); lbb.ID = "Break-" + i.ToString(); lbb.Text = "&lt;br&gt;"; ph.Controls.Add(lb); ph.Controls.Add(lbl); ph.Controls.Add(lbd); ph.Controls.Add(grid); ph.Controls.Add(lbb); } private void grid_ItemCreated(object sender, GridItemEventArgs e) { if (e.Item is GridEditableItem &amp;&amp; e.Item.IsInEditMode) { GridEditableItem editableItem = e.Item as GridEditableItem; TableCell cell = editableItem["Duration"]; if (cell.Controls.Count &gt; 0 &amp;&amp; cell.Controls[0] is RadAutoCompleteBox) { ((RadAutoCompleteBox)(cell.Controls[0])).TextSettings.SelectionMode = RadAutoCompleteSelectionMode.Single; ((RadAutoCompleteBox)(cell.Controls[0])).AllowCustomEntry = false; ((RadAutoCompleteBox)(cell.Controls[0])).DataSource = GetTableForAuto(); } } } } </code></pre> <h1>Modified code for need_griddatasource just for testing</h1> <pre><code>void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { RadGrid grid = (RadGrid)sender; string id = grid.ID; for (int i = 0; i &lt; HttpContext.Current.Session.Count; i++) { var crntSession = HttpContext.Current.Session.Keys[i]; HttpContext.Current.Response.Write(string.Concat(crntSession, "=", HttpContext.Current.Session[crntSession]) + " Type of session is: " + HttpContext.Current.Session[crntSession].GetType() + "&lt;br /&gt;"); } HttpContext.Current.Response.Write("Last line current session is: " + HttpContext.Current.Session[1].GetType() + "&lt;br /&gt;"); if (HttpContext.Current.Session[1] == null) { HttpContext.Current.Response.Write("Session is null" + "&lt;br /&gt;"); } else { HttpContext.Current.Response.Write("Session is not null" + "&lt;br /&gt;"); } //DataTable current = (DataTable)HttpContext.Current.Session[1]; //HttpContext.Current.Response.Write(current.Rows.Count); //DataTable current = (DataTable)HttpContext.Current.Session[int.Parse(id.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; //grid.DataSource = current; } </code></pre> <p>Below are the results that showed up:</p> <h1>when coming from CreasteEstimate1.aspx</h1> <pre><code>CustomerInfo=Table1 Type of session is: System.Data.DataTable Tables=1 Type of session is: System.Int32 1= Type of session is: System.Data.DataTable Last line current session is: System.Int32 Session is not null </code></pre> <h1>When coming from CreateEstimate2.aspx</h1> <pre><code>Tables=1 Type of session is: System.Int32 1= Type of session is: System.Data.DataTable Last line current session is: System.Data.DataTable Session is not null </code></pre> <p>I don't know whats the difference and why it is happening like that</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload