无法将数组列表转换为字符串

时间:2010-08-23 10:33:17

标签: c#

我有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;
    }
}

5 个答案:

答案 0 :(得分:1)

除了其他人所说的关于ArrayList和方法签名中的字符串之间的数据类型不匹配之外,你看起来实际上并不希望它成为一个字符串,因为你将它作为一个int参数传递给存储过程。

我建议你在第一个方法中做一个int.Parse(或者你认为合适的int.TryParse)并将它作为int传递给方法。

答案 1 :(得分:0)

错误在于:

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参数。

答案 2 :(得分:0)

您的方法public DataTable GetModelName(string Model_Id)需要签名中定义的字符串。

您正在尝试将ArrayList传递给方法 - Cls.GetModelName(Array);

你应该在IDE中得到警告(以及关于名为Array的变量)

答案 3 :(得分:0)

如果这是您确切的代码,肯定会遇到编译器错误? GetModelName将字符串作为参数,并传入ArrayList类型。

如果你想将你的ID数组转换为字符串,只需要一个ArrayList的扩展方法,它迭代每个项目并返回字符串值,例如。

public static string ToArrayString(this ArrayList list)
{
    return String.Join(", ", Cast<string>().ToArray());
}

查看代码时,ArrayList用法似乎可以忽略不计,因为您可以直接将SelectedValue传递给Bind方法。

答案 4 :(得分:0)

不过,你的代码看起来像这样:

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;
}