数据源是无效类型。它必须是IListSource,IEnumerable或IDataSource

时间:2014-03-24 16:15:23

标签: c# asp.net data-binding drop-down-menu

我有一个获取DropDownList的函数,应该运行一个存储过程并返回一个Supplires名称taht应该显示在dropdownlsit。

这是功能:

public void LoadSuppliers(DropDownList ddl , int num)
{
    con = connect("igroup9_test1ConnectionString");
    using (SqlCommand sqlComm = new SqlCommand("[spGetSuppliers]", con))
    {
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }

        try
        {
            sqlComm.CommandType = CommandType.StoredProcedure;
            sqlComm.Parameters.AddWithValue("@RowMeterialID ", num);

            sqlComm.CommandTimeout = 600;
            ddl.DataSource = sqlComm;
            sqlComm.ExecuteNonQuery();
            ddl.DataBind();
            ddl.DataTextField = "sName";
            ddl.DataValueField = "sName";
        }

        catch (Exception ex)
        {
            throw (ex);
        }
    }

}

这是程序:

USE [igroup9_test1]
GO
/****** Object:  StoredProcedure [dbo].[spGetSuppliers]    Script Date: 03/24/2014 18:13:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[spGetSuppliers]
(
@RowMeterialID int
)

as

begin

select distinct sName
from Supplier, RawMaterials, SupplierRawMaterials
where RawMaterials.rmID=@RowMeterialID and RawMaterials.rmID=SupplierRawMaterials.rmID and SupplierRawMaterials.SupplierID=Supplier.SupplierID

end

当我运行该程序时,它会抛出一个错误:

  

System.InvalidOperationException:数据源是无效类型。它   必须是IListSource,IEnumerable或IDataSource。

2 个答案:

答案 0 :(得分:0)

您无法指定ddl.DataSource = sqlComm,因为它是SqlCommand。

填写DataSet并指定

ddl.DataSource = dsMyResult;

答案 1 :(得分:0)

您尝试将SqlCommand的实例直接分配到DataSource

ddl.DataSource = sqlComm;

我不确定这是否是一个错字或您认为它会自动运行存储过程并将结果分配给控件,但它不会起作用。

另外,ExecuteNonQuery()不是正确的调用方法,如果您想要获取记录。请尝试ExecuteReader()

var reader = sqlComm.ExecuteReader();

while (reader.Read())
{
    // Do something with the data
}