2010-08-23 238 views
0

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

回答

0

当然,你得到一个编译错误,如果这是你的确切代码? GetModelName以字符串作为参数,并且您传入的类型为ArrayList

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

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

看,你可以简单地传递SelectedValue直入绑定方法ArrayList使用出现n​​egligiable。

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

0

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

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

你应该在IDE中得到警告这(和有关名为Array变量)

1

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

我建议在第一种方法中,你想要做一个int.Parse(或int.TryParse,如你所见),并将其作为int传递给方法。

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