简体   繁体   English

当我尝试获取GridView以显示数据时,GridView返回null

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

I am trying to return the table of Users and display it on a page which uses a masterpage. 我试图返回“用户”表并将其显示在使用母版页的页面上。

My master page file called AjaxMaster.Master looks like this - 我的母版页文件名为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>

And the code-behind file which looks like this - 还有看起来像这样的代码隐藏文件-

            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();
                        }


                    }


                }
            }

It compiles ok but when I run it, the line - 它可以编译,但是当我运行它时,该行-

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

returns null and the following lines throw an exception - 返回null,并且以下各行引发异常-

            gridviewusers.DataSource = reader;

            gridviewusers.DataBind();

The stack trace of the exception looks like this - 异常的堆栈跟踪如下所示:

             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 

Line 115 of AjaxMaster.Master.cs is - AjaxMaster.Master.cs的115行是-

gridviewusers.DataSource = reader;

can you try this.Master.GridView1? 你可以试试this.Master.GridView1吗? I think you can try this.Master.FindControl("GridView1") 我认为您可以尝试this.Master.FindControl(“ GridView1”)

Classic naming container problem. 经典的命名容器问题。 GridView is not in the current context because it is contained in the tab panel. GridView不在当前上下文中,因为它包含在选项卡面板中。 FindControl is not recursive. FindControl不是递归的。

Try TabContainer1.ActiveTab.FindControl("GridView1") 尝试TabContainer1.ActiveTab.FindControl(“ GridView1”)

You don't need to use FindControl. 您不需要使用FindControl。 You can refer to it as GridView1. 您可以将其称为GridView1。

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

will populate the GridView. 将填充GridView。

The reason that it is null is because you don't have the GridView your are referring to inside of the AjaxLoginView1. 它为null的原因是因为您没有在AjaxLoginView1内部引用的GridView。 In the code you posted here, it is a child of the MasterPage. 在您在此处发布的代码中,它是MasterPage的子级。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM