代码永远不会通过SPGridView.Rows进入foreach?

时间:2016-01-05 13:49:16

标签: c# asp.net sharepoint foreach

我有一个让我发疯的问题...... 我是一个简单的SPGridView: enter image description here

在报告字段中,有一些超链接控件指向一个页面,传递一个查询字符串id,它生成一些pdf文件,其中包含一些我没有做过的代码。为了更好地解释:

  • 第一行有NavigationUrl =" /Pages/Report.aspx?ID_REPORT = 1"
  • 第二行有NavigationUrl =" /Pages/Report.aspx?ID_REPORT = 3"

此功能有效。当我点击一个网址时,报告已生成,并且浏览器会正确询问我是否要下载该文件。

我尝试实现的功能是多个报告下载,这些功能在单个zip文件中选中了复选框。所以我将Ionic.Zip.dll添加到解决方案中并使用返回字节数组的报告生成代码创建了一个方法:

private byte[] getFileBytes(string id)
{
try
{
    byte[] file = null;

    bool isAdmin = Utility.IsManagementMode;

    UDTT_USER_GROUPS groups = new UDTT_USER_GROUPS();
    if (!isAdmin)
    {
        groups.PopulateByDataTable(Utility.GetSecurityTable(SPContext.Current.Web, isAdmin));
    }

    MOSSRepository repo = new MOSSRepository(this.ConnectionString);

    GET_REPORTParams pars = new GET_REPORTParams();
    pars.IS_ADMIN = isAdmin;
    pars.GROUPS = groups;
    pars.ID_REPORT = Convert.ToInt32(id);

    GET_REPORTResult result = repo.GET_REPORT(pars);

    if (result.Items != null && result.Items.Count > 0)
    {
        file = result.Items[0].FILE;

        return file;
    }
    else
    {
        throw new FileNotFoundException();
    }
}
catch (Exception exc)
{
    throw new Exception(ErrorHelper.GetHtmlMessage(exc), exc);
}
}

这是按钮点击代码:

protected void btnExtract_Click(object sender, EventArgs e)
{       
    using (var zip = new ZipFile())
    {
        foreach (GridViewRow row in this.SPGridView2.Rows)
        {
            if (((CheckBox)row.FindControl("chkSelect")).Checked)
            {
                zip.AddEntry(((HiddenField)row.FindControl("hfName")).Value, getFileBytes(((HiddenField)row.FindControl("hfID")).Value));
            }
        }

        zip.Save(@"C:\Test\Reports.zip");
    }
}

FindControl方法中的ID是正确的,但它不起作用。 我无法调试,我也不知道为什么。它说"没有加载任何符号......",我正在使用SharePoint 2013。

所以看到目前我只有两条记录,我试图手动生成两个报告:

protected void btnExtract_Click(object sender, EventArgs e)
{       
    using (var zip = new ZipFile())
    {
        zip.AddEntry("File1", getFileBytes("1"));
        zip.AddEntry("File3", getFileBytes("3"));

        zip.Save(@"C:\Test\Reports.zip");
    }
}

它有效! 我在ULS中没有出现过,所以我认为我的代码永远不会进入foreach循环。

您能帮忙找到解决方案吗?

谢谢

0 个答案:

没有答案