Passing dataset between ASP.NET Web Forms

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • zhshqzyc
    New Member
    • Feb 2008
    • 9

    Passing dataset between ASP.NET Web Forms

    I am going to past a dataset from First.aspx to Second.aspx.
    A whole table will be displayed on First.aspx and partial columns
    will be displayed on Second.aspx.
    First.aspx view in browser works well if I exclude Second.aspx. But when Second.aspx is included in the project, an error happens.
    I can't find what is wrong in my code.

    Code:
     System.NullReferenceException was unhandled by user code
      Message="Object reference not set to an instance of an object."
    First.aspx.cs
    Code:
    namespace FirstPage
    {
        public partial class GetStrings : System.Web.UI.Page
        {
            getStrings g = new getStrings();
            protected void Page_Load(object sender, EventArgs e)
            {
                string strConnectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;
                SqlConnection myConnection = new SqlConnection(strConnectionString);
                DataSet myDataSet = new DataSet();
                try
                {
                    myConnection.Open();
                    // create the data
                    GenerateDataSet(myDataSet, myConnection);
                }
                finally
                {
                    myConnection.Close();
                    // bind each to table to a grid
    
                }
                Session["myds"] = myDataSet;
                // databind the page 
                GridView1.DataSource = myDataSet.Tables["Weather"];
                GridView1.DataBind();
            }
    and
    Second.aspx.cs
    Code:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using FirstPage;
    
    public partial class Second : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DataSet ds = (DataSet)Session["myds"];
            FillTable(ds);
            GridView1.DataSource = ds.Tables["Index"];
            GridView1.DataBind();
        }
    
        void FillTable(DataSet dset)
        {
            DataTable indexTable = dset.Tables.Add("Index");
    
            DataColumn indexID =
                indexTable.Columns.Add("State", typeof(string));
            indexTable.Columns.Add("Division", typeof(string));
            indexTable.Columns.Add("MOIST_INDEX", typeof(string));
            indexTable.Columns.Add("DROUGHT_INDEX", typeof(string));
        }
    }
    Second.aspx
    Code:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Second.aspx.cs" Inherits="Second" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Reference Page="First.aspx" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    Any help will be appreciated.
  • nateraaaa
    Recognized Expert Contributor
    • May 2007
    • 664

    #2
    Second.aspx.cs

    Code: ( text )
    using System;
    using System.Data;
    using System.Data.Sql Client;
    using System.Configur ation;
    using System.Web;
    using System.Web.Secu rity;
    using System.Web.UI;
    using System.Web.UI.W ebControls;
    using System.Web.UI.W ebControls.WebP arts;
    using System.Web.UI.H tmlControls;
    using FirstPage;

    public partial class Second : System.Web.UI.P age
    {
    protected void Page_Load(objec t sender, EventArgs e)
    {
    DataSet ds = (DataSet)Sessio n["myds"];
    FillTable(ds);
    GridView1.DataS ource = ds.Tables["Index"];
    GridView1.DataB ind();
    }

    void FillTable(DataS et dset)
    {
    DataTable indexTable = dset.Tables.Add ("Index");

    DataColumn indexID =
    indexTable.Colu mns.Add("State" , typeof(string)) ;
    indexTable.Colu mns.Add("Divisi on", typeof(string)) ;
    indexTable.Colu mns.Add("MOIST_ INDEX", typeof(string)) ;
    indexTable.Colu mns.Add("DROUGH T_INDEX", typeof(string)) ;
    }
    }
    I believe what is happening is table Index does not exist in your dataset so GridView1.DataS ource = ds.Tables["Index"];
    is creating an object reference not set to an instance of an object error. There are a few ways to change your code to eliminate this error. Here a 2 options.
    1. Change your parameter to include the out keyword
    [CODE=cpp]public void FillTable(out DataSet dset)
    {
    DataTable indexTable = dset.Tables.Add ("Index");

    DataColumn indexID =
    indexTable.Colu mns.Add("State" , typeof(string)) ;
    indexTable.Colu mns.Add("Divisi on", typeof(string)) ;
    indexTable.Colu mns.Add("MOIST_ INDEX", typeof(string)) ;
    indexTable.Colu mns.Add("DROUGH T_INDEX", typeof(string)) ;
    }[/CODE]

    2. Change your method to return a DataSet and then add the DataTable to your DataSet.
    [CODE=cpp]public DataSet FillTable(DataS et dset)
    {
    DataTable indexTable = dset.Tables.Add ("Index");

    DataColumn indexID =
    indexTable.Colu mns.Add("State" , typeof(string)) ;
    indexTable.Colu mns.Add("Divisi on", typeof(string)) ;
    indexTable.Colu mns.Add("MOIST_ INDEX", typeof(string)) ;
    indexTable.Colu mns.Add("DROUGH T_INDEX", typeof(string)) ;

    return dset;
    }
    protected void Page_Load(objec t sender, EventArgs e)
    {
    DataSet ds = (DataSet)Sessio n["myds"];
    ds = FillTable(ds);
    GridView1.DataS ource = ds.Tables["Index"];
    GridView1.DataB ind();
    }
    [/CODE]

    Nathan

    Comment

    • zhshqzyc
      New Member
      • Feb 2008
      • 9

      #3
      Thanks!
      I will try it.

      Comment

      Working...