簡體   English   中英

當我嘗試獲取GridView以顯示數據時,GridView返回null

[英]GridView returning null when I try to grab the GridView to display data

我試圖返回“用戶”表並將其顯示在使用母版頁的頁面上。

我的母版頁文件名為AjaxMaster.Master看起來像這樣-

            <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="AjaxMaster.master.cs"
                Inherits="e.AjaxMaster" %>

            <!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="AjaxHead1" runat="server">
                <title></title>

                <link rel="stylesheet" type="text/css" href="Global.css" />
                <style type="text/css">
                    #backtoblog a
                    {
                        position: absolute;
                        top: 7px;
                        left: 15px;
                        text-decoration: none;
                    }
                </style>
                <asp:ContentPlaceHolder ID="ajaxhead" runat="server">
                </asp:ContentPlaceHolder>
            </head>
            <body>
                <form id="ajaxform1" runat="server">

                <asp:ToolkitScriptManager ID="AjaxToolkitScriptManager2" runat="server" />
                <div>
                </div>
                <asp:LoginView ID="AjaxLoginView1" runat="server">
                    <LoggedInTemplate>
                        <div id="companyLogo">
                            <img src="images/company_logo.png" alt="Company Logo" border="0" width="123" border="0"
                                height="40" />
                        </div>
                        <div id="header">
                            <!-- start of main -->

                            <div id="welcome">
                                <a href="Welcome.aspx">Welcome</a> <strong>
                                    <asp:LoginName ID="LoginName1" runat="server" />
                                </strong>, [
                                <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" />
                                ]
                            </div>
                            <span id='sm_holder'></span>
                            <div class="clear">
                            </div>
                            <%

                                string sPagePath = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
                                System.IO.FileInfo oFileInfo = new System.IO.FileInfo(sPagePath);
                                string sPageName = oFileInfo.Name;
                            %>

                            <div>
                                <!-- start of TabContainer -->
                                <asp:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="1">
                                    <asp:TabPanel runat="server" HeaderText="Home" ID="TabPanel1">
                                        <HeaderTemplate>
                                            <span>
                                                <img src="iconimages/home001.png" alt="Home" border="0" height="10px" />&nbsp;Home</span>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Home -->
                                            <% Response.WriteFile("HomeTab.aspx");  %>
                                            <!-- End of Home -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel runat="server" HeaderText="Dashboard" ID="TabPanel7">
                                        <HeaderTemplate>
                                            <p>
                                                Dashboard</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Dashboard -->
                                            <% Response.WriteFile("DashboardTab.aspx");  %>
                                            <!-- End of Dashboard -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel ID="TabPanel2" runat="server" HeaderText="Locations">
                                        <HeaderTemplate>
                                            <p>
                                                Locations</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Locations -->
                                            <% Response.WriteFile("LocationsTab.aspx");  %>
                                            <!-- End of Locations -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel ID="TabPanel3" runat="server" HeaderText="Users">
                                        <HeaderTemplate>
                                            <p>
                                                Users</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Users -->
                                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings: SiteSQL %>"
                                                SelectCommand="SELECT * FROM aspnet_Users"></asp:SqlDataSource>
                                            <asp:GridView ID="GridView1" runat="server">
                                            </asp:GridView>
                                            <!-- End of Users -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel ID="TabPanel4" runat="server" HeaderText="Reports">
                                        <HeaderTemplate>
                                            <p>
                                                Reports</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Reports -->
                                            <% Response.WriteFile("ReportsTab.aspx");  %>
                                            <!-- End of Reports -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel ID="TabPanel5" runat="server" HeaderText="Alerts">
                                        <HeaderTemplate>
                                            <p>
                                                Alerts</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>

                                        </ContentTemplate>
                                    </asp:TabPanel>
                                    <asp:TabPanel ID="TabPanel6" runat="server" HeaderText="Preferences">
                                        <HeaderTemplate>
                                            <p>
                                                Preferences</p>
                                        </HeaderTemplate>
                                        <ContentTemplate>
                                            <!-- Start of Preferences -->
                                            <!-- start of left Panel for Preferences -->
                                            <%-- <div id="leftColumn">--%>

                                            <%--   </div>--%>
                                            <!-- end of left Panel for Preferences -->
                                            <!-- End of Preferences -->
                                        </ContentTemplate>
                                    </asp:TabPanel>
                                </asp:TabContainer>
                                <!-- end of TabContainer -->

                                <div class="clear">
                                </div>
                                <div class="line">
                                </div>
                                <div>
                                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                                    </asp:ContentPlaceHolder>
                                </div>

                                <div id="footer">

                                </div>
                    </LoggedInTemplate>
                    <AnonymousTemplate>
                        You are not logged in.
                        <br />
                        Please login to access eservice
                    </AnonymousTemplate>
                </asp:LoginView>
                </form>
            </body>
            </html>

還有看起來像這樣的代碼隱藏文件-

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Web;
            using System.Web.UI;
            using System.Web.UI.WebControls;
            using System.Data.SqlClient;

            namespace e
            {
                public partial class AjaxMaster : System.Web.UI.MasterPage
                {
                    protected void Page_Load(object sender, EventArgs e)
                    {



                        if (!IsPostBack)
                        {
                            BindUsersGrid();
                        }
                    }


                    private void BindUsersGrid()
                    {
                        SqlConnection conn;
                        SqlCommand comm;

                        SqlDataReader reader;

                        string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["SiteSQL"].ConnectionString;

                        conn = new SqlConnection(connectionString);


                        comm = new SqlCommand("SELECT * FROM aspnet_Users", conn);

                        try
                        {
                            conn.Open();
                            reader = comm.ExecuteReader();

                            GridView gridviewusers = (GridView)AjaxLoginView1.FindControl("GridView1");



                            gridviewusers.DataSource = reader;

                            gridviewusers.DataBind();


                            reader.Close();


                        }

                        finally
                        {
                            conn.Close();
                        }


                    }


                }
            }

它可以編譯,但是當我運行它時,該行-

GridView gridviewusers = (GridView)AjaxLoginView1.FindControl("GridView1");

返回null,並且以下各行引發異常-

            gridviewusers.DataSource = reader;

            gridviewusers.DataBind();

異常的堆棧跟蹤如下所示:

             Object reference not set to an instance of an object.
            Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

            Source Error:

            An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

            Stack Trace:

            [NullReferenceException: Object reference not set to an instance of an object.]
               eservice.AjaxMaster.BindUsersGrid() in AjaxMaster.Master.cs:115
               eservice.AjaxMaster.Page_Load(Object sender, EventArgs e) in AjaxMaster.Master.cs:27
               System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
               System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
               System.Web.UI.Control.OnLoad(EventArgs e) +99
               System.Web.UI.Control.LoadRecursive() +50
               System.Web.UI.Control.LoadRecursive() +141
               System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627


            Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3614 

AjaxMaster.Master.cs的115行是-

gridviewusers.DataSource = reader;

你可以試試this.Master.GridView1嗎? 我認為您可以嘗試this.Master.FindControl(“ GridView1”)

經典的命名容器問題。 GridView不在當前上下文中,因為它包含在選項卡面板中。 FindControl不是遞歸的。

嘗試TabContainer1.ActiveTab.FindControl(“ GridView1”)

您不需要使用FindControl。 您可以將其稱為GridView1。

GridView1.DataSource = reader;
GridView1.DataBind();

將填充GridView。

它為null的原因是因為您沒有在AjaxLoginView1內部引用的GridView。 在您在此處發布的代碼中,它是MasterPage的子級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM