无法将数组列表转换为字符串
我有Repeater绑定方法此方法通过存储过程从数据库中检索数据,当Model_Id传递给此方法时,它将检索数据,当用户多次选择DDL时,用户可以多次重复中继器。我做的代码,我添加哪些用户从DDL在数组列表,但错误选择所有Model_Ids出现无法将数组列表转换为字符串
不能数组列表转换为字符串值:
protected void Add_Click(object sender, ImageClickEventArgs e)
{
ArrayList Array = new ArrayList();
Array.Add(DDLModel.SelectedValue);
DLHome.DataSource = Cls.GetModelName(Array);
DLHome.DataBind();
}
public DataTable GetModelName(string Model_Id)
{
using (SqlConnection conn = Connection.GetConnection())
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetComparisonModel";
SqlParameter ParentID_Param = cmd.Parameters.Add("@Model_Id", SqlDbType.Int);
ParentID_Param.Value = Model_Id;
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(dt);
return dt;
}
}
当然,你得到一个编译错误,如果这是你的确切代码? GetModelName
以字符串作为参数,并且您传入的类型为ArrayList
。
如果你想将你的ID数组转换为字符串,只需要一个ArrayList的扩展方法,它迭代每个项并返回字符串值,例如在你的代码
public static string ToArrayString(this ArrayList list)
{
return String.Join(", ", Cast<string>().ToArray());
}
看,你可以简单地传递SelectedValue
直入绑定方法ArrayList
使用出现negligiable。
的错误是在这里:
ArrayList Array = new ArrayList(); // Declare Array of type ArrayList
Array.Add(DDLModel.SelectedValue);
DLHome.DataSource = Cls.GetModelName(Array); // Pass Array to method that expects a string
您正在尝试将ArrayList
传入方法GetModelName
。此方法需要一个string
参数。
您的方法public DataTable GetModelName(string Model_Id)
需要签名中定义的字符串。
您正在尝试一个ArrayList传递给方法 - Cls.GetModelName(Array);
你应该在IDE中得到警告这(和有关名为Array
变量)
除了其他人对于ArrayList和方法签名中的字符串之间的数据类型不匹配的看法之外,您看起来并不像实际上希望它是字符串,因为您将它作为int参数传递给存储过程。
我建议在第一种方法中,你想要做一个int.Parse(或int.TryParse,如你所见),并将其作为int传递给方法。
顺便说一句,你的代码看起来是这样的:
using (SqlConnection conn = Connection.GetConnection())
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetComparisonModel";
cmd.Parameters.Add("@Model_Id", SqlDbType.Int).Value = Model_Id;
DataTable dt = new DataTable();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
return dt;
}