为啥 GridView 不在 asp:Panel 中显示数据

Posted

技术标签:

【中文标题】为啥 GridView 不在 asp:Panel 中显示数据【英文标题】:Why is GridView not displaying data inside a asp:Panel为什么 GridView 不在 asp:Panel 中显示数据 【发布时间】:2014-09-27 08:28:54 【问题描述】:

我的Default.aspx 页面中有以下内容(默认情况下,Status 选项卡在页面加载时显示为content):

<asp:Content runat="server" ID="FeaturedContent3" ContentPlaceHolderID="ContentMain">
    <div style="padding-left: 10px; padding-top: 10px;">
        <asp:BulletedList ID="tabs" ClientIDMode="Static" runat="server" DisplayMode="HyperLink">
            <asp:ListItem Text="Status" Value="#tab1"></asp:ListItem>
            <asp:ListItem Text="Your Tasks" Value="#tab2"></asp:ListItem>
            <asp:ListItem Text="Messages" Value="#tab3"></asp:ListItem>
            <asp:ListItem Text="Dependencies" Value="#tab4"></asp:ListItem>
            <asp:ListItem Text="Documents" Value="#tab5"></asp:ListItem>
            <asp:ListItem Text="Pro-Forma" Value="#tab6"></asp:ListItem>
            <asp:ListItem Text="Admin Controls" Value="#tab7"></asp:ListItem>
        </asp:BulletedList>

        <asp:Panel ID="content" runat="server" ClientIDMode="Static">
            <asp:Panel ID="tab1" ClientIDMode="Static" runat="server">THIS IS A STATUS
                <asp:GridView ID="yourTasksGV" runat="server" ClientIDMode="Static">
                </asp:GridView>
            </asp:Panel>
            <asp:Panel ID="tab2" ClientIDMode="Static" runat="server">THIS IS YOUR TASKS
            </asp:Panel>
            <asp:Panel ID="tab3" ClientIDMode="Static" runat="server">THIS IS A MESSAGE</asp:Panel>
            <asp:Panel ID="tab4" ClientIDMode="Static" runat="server">THIS IS A DEPENDENCIES</asp:Panel>
            <asp:Panel ID="tab5" ClientIDMode="Static" runat="server">THIS IS A DOCUMENT</asp:Panel>
            <asp:Panel ID="tab6" ClientIDMode="Static" runat="server">THIS IS A PRO-FORMA</asp:Panel>
            <asp:Panel ID="tab7" ClientIDMode="Static" runat="server">THIS IS A ADMIN CONTROLS</asp:Panel>
        </asp:Panel>
    </div>
</asp:Content>

各自的content 是根据点击的标签显示的,这是通过JQuery 控制的。我正在从Default.aspx 的代码隐藏中填充状态选项卡内容中的GridView

public void PullData()

    DataTable taskData = new DataTable();
    string connString = @"user id = myid1;" + "password= myP@$$w0Rd; server= dev-mag; database= Ob;" + "connection timeout=30";
    string query = @"SELECT column1, column2, column3, column4, column5
        FROM dbo.table13934";

    using (SqlConnection conn = new SqlConnection(connString))
    
        try
        
            SqlCommand cmd = new SqlCommand(query, conn);

            // create data adapter
            SqlDataAdapter da = new SqlDataAdapter(query, conn);
            // this will query your database and return the result to your datatable
            da.Fill(taskData);
            //conn.Close();
            yourTasksGV.DataSource = taskData;
            yourTasksGV.DataBind();

        
        catch (Exception ex)
        
            string error = ex.Message;
        
    

protected void Page_Load(object sender, EventArgs e)

    PullData();

当页面加载时,content 只显示THIS IS A STATUSGridView 中没有任何内容,但是如果我将GridViewcontent 中取出并放置在页面上的任何其他位置,它会显示数据从 SQL 查询中检索到的。

为什么会发生这种情况,我该如何解决?

调试器:

不确定额外的 DIV 是从哪里创建的:/

这是 Jquery 代码:

<script type="text/javascript">
        $(document).ready(function () 
            $("#content div").hide(); // Initially hide all content
            $("#tabs li:first").attr("id", "current"); // Activate first tab
            $("#content div:first").fadeIn(); // Show first tab content

            $('#tabs a').click(function (e) 
                e.preventDefault();
                $("#content div").hide(); //Hide all content
                $("#tabs li").attr("id", ""); //Reset id's
                $(this).parent().attr("id", "current"); // Activate this
                //$('#' + $(this).attr('title')).fadeIn(); // Show content for current tab
                $($(this).attr('href')).fadeIn();
            );
        );
    </script>

不确定JQuery################ 来自哪里...

【问题讨论】:

你在后面的代码中设置tab1.Visible = false吗? 是否有任何 jquery 脚本或 css 使具有 gridview 的选项卡可见? 这很奇怪,因为当我查看源代码时,正在添加一个 DIV 并将其设置为Display: none... hmmmmmmm 我已经更新了我的问题。 【参考方案1】:

您没有看到显示的gridview 的原因是您的jquery 检查$("#content div:first").fadeIn();

#content div // references your main panel and tab1 panel

并且 html 会为 gridview 本身生成另一个 &lt;div&gt;,这在您的代码中未检查。所以改变你的脚本如下。我在这两个条件中都添加了$("#content div div:first").fadeIn();

<script type="text/javascript">
    $(document).ready(function () 
        $("#content div").hide(); // Initially hide all content
        $("#tabs li:first").attr("id", "current"); // Activate first tab
        $("#content div:first").fadeIn(); // Show first tab content

        $("#content div div:first").fadeIn(); // New code to show the gridview

        $('#tabs a').click(function (e) 
            e.preventDefault();
            $("#content div").hide(); //Hide all content
            $("#tabs li").attr("id", ""); //Reset id's
            $(this).parent().attr("id", "current"); // Activate this
            //$('#' + $(this).attr('title')).fadeIn(); // Show content for current tab
            $($(this).attr('href')).fadeIn();

            $("#content div div:first").fadeIn(); // New code to show the gridview
        );
    );
</script>

这应该会在页面加载时显示第一个带有 gridview 的选项卡,并在您单击 Status 链接时再次显示。可能有比这更复杂的解决方案,但这是我根据您的代码方法提出的。

【讨论】:

【参考方案2】:

确保您有数据。 See this link 测试你有没有数据

【讨论】:

我确实有数据,因为我可以在外面看到它。我认为 CSS 以某种方式使 DIV 隐藏...:/ 尽管如此,我还是把它放在你的代码中。对它没有害处。 与通过 JQuery 隐藏或可见的设置有关导致 GridView 不显示?

以上是关于为啥 GridView 不在 asp:Panel 中显示数据的主要内容,如果未能解决你的问题,请参考以下文章

VB.net 中的 Textchanged 不在我的 gridview 中显示结果

Jquery每个函数不在asp.net的gridview文本框中执行

为啥我使用gridview控件只能显示一行数据

为啥数据表不适用于gridview? [复制]

gridview 分页问题,成功分页了,为啥点击第x页时显示空白?

android中gridview的item为啥不能居中