代码之家  ›  专栏  ›  技术社区  ›  Arunabh Das

当我试图抓取GridView以显示数据时,GridView返回空值

  •  0
  • Arunabh Das  · 技术社区  · 14 年前

    我试图返回用户表并将其显示在使用母版页的页面上。

    我的主页面文件名为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");
    

    返回空值,下列行引发异常-

                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;
    
    3 回复  |  直到 14 年前
        1
  •  0
  •   RedPanda    14 年前

    你能试试这个.master.gridview1吗? 我想你可以试试这个.master.findcontrol(“gridview1”)。

        2
  •  0
  •   matt-dot-net    14 年前

    经典命名容器问题。GridView不在当前上下文中,因为它包含在选项卡面板中。findcontrol不是递归的。

    尝试tabcontainer1.activetab.findcontrol(“gridview1”)

        3
  •  -1
  •   TheGeekYouNeed    14 年前

    您不需要使用findcontrol。您可以将其称为GridView1。

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

    将填充网格视图。

    它为空的原因是您没有所指的AjaxLoginView内部的GridView。在您在这里发布的代码中,它是母版页的子级。