如果datatable具有列但没有行,则gridview databind将失败

时间:2014-08-21 16:59:06

标签: c# asp.net gridview data-binding dataset

我将动态数据集返回到动态生成的网格视图中,该数据集包含多个数据表。我使用下面的代码分别对每个数据表进行数据绑定。

// Create the grid views for each one that was returned
        foreach (System.Data.DataTable table in datset.Tables)
        {
            WebCommon.Controls.GridView view = new WebCommon.Controls.GridView();
            ReportContainerPanel.Controls.Add(view);
            view.AutoGenerateColumns = true;
            view.ShowHeaderWhenEmpty = true;
            view.ShowHeader = true;
            view.ID = table.TableName;
            view.Size = WebCommon.Enums.TableSize.Small;
            view.DataSource = table;
            view.DataBind();

            // Add the spacer
            Literal spacer = new Literal();
            spacer.Text = "<br/>";
            ReportContainerPanel.Controls.Add(spacer);
        }

但是如果返回的数据表有0行但是我得到这个异常。

  

具有id“Table4”的GridView的数据源没有用于生成列的任何属性或属性。确保您的数据源包含内容。

我知道我可以通过检查行计数然后将其排除在打印之外来阻止这种情况,但是对于用户来说,看到没有为网格返回任何数据是很有用的。所以我想要一个带有标题列的空网格来显示。有没有解决这个错误的方法?

编辑这个问题似乎实际上是因为有问题的空结果只有1列varbinary类型,而gridview根本不喜欢它。

1 个答案:

答案 0 :(得分:0)

只需检查一个空集,

如果该组为空,请添加一个空行然后继续

    foreach (System.Data.DataTable table in datset.Tables)
    {
        if(table.Rows.Count == 0)
        {
            <code to add a new row>
        }//at this point the rest of the operations should work on the table

        WebCommon.Controls.GridView view = new WebCommon.Controls.GridView();
        ReportContainerPanel.Controls.Add(view);
        view.AutoGenerateColumns = true;
        view.ShowHeaderWhenEmpty = true;
        view.ShowHeader = true;
        view.ID = table.TableName;
        view.Size = WebCommon.Enums.TableSize.Small;
        view.DataSource = table;
        view.DataBind();

        // Add the spacer
        Literal spacer = new Literal();
        spacer.Text = "<br/>";
        ReportContainerPanel.Controls.Add(spacer);
    }

How to create a new row for a dataset