2010-08-23 2 views
0

У меня был 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; 
    } 
} 

ответ

0

Конечно, вы получаете ошибку компилятора, если это вы точный код? GetModelName принимает строку в качестве параметра, и вы проходите тип ArrayList.

Если вы хотите преобразовать свой массив идентификаторов в строку, у вас есть метод расширения ArrayList, который выполняет итерацию над каждым элементом и возвращает строковое значение, например.

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

Глядя на код, то ArrayList использование появляется negligiable, как вы можете просто передать SelectedValue прямо в метод Bind.

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; 
} 
Смежные вопросы