"数据源是无效类型"将单行绑定到列表视图时出现异常

时间:2014-03-30 19:18:19

标签: c# asp.net

我有网格视图来显示所有客户名称,当用户点击任何名称时,我使用listview显示所选客户的信息。

因此,在过去,如果我在页面中有多个客户,我将有一个网格视图填充,并且列表视图为空,直到用户选择任何客户。

这是代码:

var results = MyClass.GetCustomerInformation(CallerId);
rowCount = results.Rows.Count;
CallerId = rowCount > 0 ? results.Rows[0][4].ToString() : CallerId;
if (rowCount > 1)
{
    ListView1.Enabled = false;
    GridView1.DataSource = results;
    GridView1.DataBind();
}
else
{
    GridView1.Enabled = false;
    ListView1.DataSource = results;
    ListView1.DataBind();
}

现在

当有多个客户时,我需要listview才能拥有第一个客户。

因此,我将代码编辑为此代码:

var results = MyClass.GetCustomerInformation(CallerId);
rowCount = results.Rows.Count;
CallerId = rowCount > 0 ? results.Rows[0][4].ToString() : CallerId;
if (rowCount > 1)
{
    //new
    ListView1.DataSource = results.Rows[0];
    ListView1.DataBind();
    //new
    GridView1.DataSource = results;
    GridView1.DataBind();
}
else
{
    GridView1.Enabled = false;
    ListView1.DataSource = results;
    ListView1.DataBind();
}

但我得到了这个例外:

  

数据源是无效类型。它必须是IListSourceIEnumerableIDataSource

注意

函数GetCustomerInformation返回DataTable类型

1 个答案:

答案 0 :(得分:1)

将数据源设置为单行时,就会出现问题。

DataRow类型未实现IListSourceIEnumerableIDataSource。您需要将其中一个传递到DataSource媒体资源,但您已通过了DataRow

要做的是从单个IEnumerable<DataRow>创建DataRow。试试这个:

ListView1.DataSource = new DataRow[]{results.Rows[0]};

这会创建一个DataRow数组,其中只包含您的第一行。 DataRow[]实现了IEnumerable<DataRow>,因此可以正常使用。