当SelectedIndexChanged调用时,Gridview为空

时间:2010-04-08 10:32:41

标签: c# asp.net gridview select sitecore

我有一个动态绑定到数据库查询的DataGrid。用户在文本字段中输入一些搜索文本,单击搜索,后面的代码使用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,从DB查询完整记录,然后填充一组编辑器/详细信息字段记录详细信息。

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

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

gridview的viewstate已启用,我看不出明显的差异。我做了一些天真的假设,还是我依赖​​于调试中可能配置不同的东西?

本地我在VS2008中运行一个空的asp.net web项目,以便更快地开发。生产服务器正在运行sitecore CMS,因此配置方式有所不同。

欢迎任何想法或建议。提前谢谢!

2 个答案:

答案 0 :(得分:1)

检查你的web.config。可能“AutomaticDataBind”属性在一个环境中设置为“false”,在开发框中设置为“true”。

显然,我无法确定,但我过去曾受到过类似问题的打击,症状与您在此描述的完全相同: - )

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

答案 1 :(得分:0)

在网站核心论坛上搜索了一些内容,我偶然发现了blog post解释一个可能的解决方案。

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

这似乎与sitecore的页面布局渲染管道有关,它扩展了子布局和内部占位符以生成整页渲染。它访问页面上的.Net控件并稍稍戳它们,这可能导致某些控件无法正常工作。

article上有一个SDN,但是如果您的帐户有足够的私有权限,则只能阅读它。希望这可能有助于将来任何其他sitecore用户。