簡體   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