代码之家  ›  专栏  ›  技术社区  ›  xan

调用SelectedIndexChanged时GridView为空

  •  0
  • xan  · 技术社区  · 15 年前

    我有一个动态绑定到数据库查询的数据报。用户在文本字段中输入一些搜索文本,单击搜索,代码隐藏使用LINQ创建适当的数据库查询(基于字符串搜索表并返回一组有限的列)。

    然后,它将GridView数据源设置为查询并调用DataBind()。

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        var query = from record in DB.Table
                    where record.Name.Contains(txtSearch.Text) //Extra string checking etc. removed.
                    select new
                    {
                        record.ID,
                        record.Name,
                        record.Date
                    };
    
        gvResults.DataSource = query;
        gvResults.DataBind();
    }
    

    这个很好用。

    当用户在网格中选择一行时,selectedIndexChanged事件处理程序从网格中的行(其中一个字段)获取ID,从数据库查询完整记录,然后用记录完整详细信息填充一组编辑器/详细信息字段。

    protected void gvResults_SelectedIndexChanged(object sender, EventArgs e)
    {
        int id = int.Parse(gvResults.SelectedRow.Cells[1].Text);
        DisplayDetails(id);
    }
    

    这在我正在开发代码的本地机器上工作得很好。但是,在生产服务器上,函数被成功调用,但行和列计数为 gvResults ,griview为0-表为空。

    GridView的视图状态已启用,我看不到明显的差异。我做过一些幼稚的假设吗,或者我是在依赖一些在调试中可能配置不同的东西吗?

    在本地,我在VS2008中运行一个空的ASP.NET Web项目,以加快开发速度。生产服务器正在运行SiteCore CMS,因此配置非常不同。

    任何想法或建议都是最受欢迎的。事先谢谢!

    2 回复  |  直到 9 年前
        1
  •  1
  •   Mark Cassidy    15 年前

    检查web.config。在一个环境中,“automaticatabind”属性可能设置为“false”,而在dev框中设置为“true”。

    显然,我不能确定,但我过去也曾被类似的问题打击过,症状和你在这里描述的完全一样。

    P.S.SiteCore将此值默认为false。

        2
  •  0
  •   xan    15 年前

    我又在SiteCore论坛上闲逛了一会儿,发现了这个问题。 blog post 解释一个潜在的解决方案。

    我添加了 <type>System.Web.UI.WebControls.GridView</type> <typesThatShouldNotBeExpanded> web.config的部分,它似乎对我们有用。

    这似乎与SiteCore的页面布局呈现管道有关,它在管道中展开子布局和内部占位符以生成完整的页面呈现。它访问页面上的.NET控件,并将其稍微插入,这可能导致某些控件无法正常工作。

    有一个 article SDN 关于这个,尽管你只有在你有足够的特权的帐户的情况下才能阅读它。希望这能帮助其他网站核心用户。