我有网格视图来显示所有客户名称,当用户点击任何名称时,我使用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();
}
但我得到了这个例外:
数据源是无效类型。它必须是
IListSource
,IEnumerable
或IDataSource
。
函数GetCustomerInformation
返回DataTable
类型
答案 0 :(得分:1)
将数据源设置为单行时,就会出现问题。
DataRow
类型未实现IListSource
,IEnumerable
或IDataSource
。您需要将其中一个传递到DataSource
媒体资源,但您已通过了DataRow
。
要做的是从单个IEnumerable<DataRow>
创建DataRow
。试试这个:
ListView1.DataSource = new DataRow[]{results.Rows[0]};
这会创建一个DataRow
数组,其中只包含您的第一行。 DataRow[]
实现了IEnumerable<DataRow>
,因此可以正常使用。