繁体   English   中英

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

[英]Cannot convert array list to string

我有Repeater绑定方法,当Model_Id传递给该方法时,该方法通过存储过程从数据库中检索数据,它还会检索数据;当用户多次选择DDL时,用户也可以重复转发器不止一次。我做了代码,并添加了所有Model_Ids哪个用户从数组列表中的DDL中选择但出现错误

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

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

除了其他人所说的关于ArrayList和方法签名中的字符串之间的数据类型不匹配之外,您似乎也不希望实际上是字符串,因为您将其作为int参数传递给了存储过程。

我建议在第一种方法中,您要执行一个int.Parse(或您认为合适的int.TryParse)并将其作为int传递给该方法。

错误在这里:

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的变量)的警告。

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

如果要将ID数组转换为字符串,只需使用ArrayList的扩展方法,该方法将遍历每个项目并返回字符串值,例如

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

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

顺便说一句,您的代码可能如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM