簡體   English   中英

如何使用MS SQL數據庫選擇級聯DropDownList

[英]How to select cascading DropDownList with MS SQL database

IDVehicle Make        Model
   0       BMW      5 series
   1       BMW      4 series
   2       AUDI        A4
   3       AUDI        A6
   4       TOYOTA      vios
   5       TOYOTA      RAV4

在c#設計器視圖中,我有2個下拉列表,其中包含Make和其他模型。

我想要的是當用戶在Make列表中選擇'BMW'時,Model列表應該包含以下5 series, 4 series

ASPX.CS

Make: <asp:DropDownList ID="<MakeList" runat="server" /><br/>
Model: <asp:DropDownList ID="ModelList" runat="server"/><br />
<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server"
    ServicePath="CascadingDropdown1.cs.asmx"
    ServiceMethod="GetMake"
    TargetControlID="MakeList" Category="Make"
    PromptText="Select Make"/>

<ajaxToolkit:CascadingDropDown ID="ccd2" runat="server"
    ServicePath="CascadingDropdown1.cs.asmx"
    ServiceMethod="GetModelForMake"
    TargetControlID="ModelList" ParentControlID="MakeList"
    Category="Model"
    PromptText="Select Model"/>

我的問題是我對查詢很困惑,列名將在.cs.asmx文件中使用。

編輯

我在這里做錯了嗎?

[WebMethod]
    public CascadingDropDownNameValue[] GetMakes(string knownCategoryValues)
    {
        string query = "SELECT VehicleMake, VehicleMakeId FROM Makes";
        List<CascadingDropDownNameValue> Makes = GetData(query);
        return Makes.ToArray();
    }

    [WebMethod]
    public CascadingDropDownNameValue[] GetModels(string knownCategoryValues)
    {
        string make = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["MakeId"];
        string query = string.Format("SELECT VehicleModel, VehicleModelId FROM Models WHERE MakeId = {0}", make);
        List<CascadingDropDownNameValue> Models = GetData(query);
        return Models.ToArray();
    }

    private List<CascadingDropDownNameValue> GetData(string query)
    {
        string conString = System.Configuration.ConfigurationManager.ConnectionStrings["SERVER=xbetasql,52292;UID=AutoTrakker;Password=trinidad2win;DATABASE=ATDBSQL;"].ConnectionString;
        SqlCommand cmd = new SqlCommand(query);
        List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
        using (SqlConnection con = new SqlConnection(conString))
        {
            con.Open();
            cmd.Connection = con;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    values.Add(new CascadingDropDownNameValue
                    {
                        name = reader[0].ToString(),
                        value = reader[1].ToString()
                    });
                }
                reader.Close();
                con.Close();
                return values;
            }
        }
    }

我有一個錯誤。 它說[Method Error 500]

UPDATE

是否可以不為每列添加ID?

嘗試這樣的事情:

<asp:DropDownList ID="ddlMake" runat="server" Width="150"></asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="cdlMake" TargetControlID="ddlMake" PromptText="Select Make" PromptValue="" ServicePath="CascadingDropdown1.asmx" ServiceMethod="GetMakes" runat="server" Category="VehicleMakeId" LoadingText="Loading Make..." />

<asp:DropDownList ID="ddlModel" runat="server" Width="150"></asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="cdlModel" TargetControlID="ddlModel" PromptText="Select Model" PromptValue="" ServicePath="CascadingDropdown1.asmx" ServiceMethod="GetModels" runat="server" Category="VehicleModelId" ParentControlID="ddlMake" LoadingText="Loading Model..." />

CascadingDropDown屬性

以下是AJAX CascadingDropDown的一些重要屬性

  • TargetControlID - 這里我們需要設置要為其創建AJAX Cascading DropDownList的DropDownList控件的ID。

  • ServicePath - 這里我們設置Web服務的URL,它將充當AJAX CascadingDropDown DropDownList的數據源。

  • ServiceMethod - 這里我們設置將用於填充AJAX CascadingDropDown DropDownList的Web方法的名稱。

  • PromptText - 此屬性是將在AJAX CascadingDropDown DropDownList中顯示的第一個或默認項的Text部分。

  • PromptValue - 此屬性是將在AJAX CascadingDropDown DropDownList中顯示的第一個或默認項的Value部分。

  • Category - 此屬性用於指定AJAX CascadingDropDown DropDownList的Category,Category值作為參數傳遞給Child或依賴AJAX CascadingDropDown DropDownList ServiceMethod即Web方法。

  • ParentControlID - 此屬性用於設置DropDownList的ID,DropDownList將在其選擇中觸發數據填充過程。

  • LoadingText-此屬性用於在調用Web方法時顯示加載文本,直到在AJAX CascadingDropDown DropDownList中填充數據。

並將您的WebMethods如下:

[WebMethod]
public CascadingDropDownNameValue[] GetMakes(string knownCategoryValues)
{
    string query = "SELECT VehicleMakeName, VehicleMakeId FROM Makes";
    List<CascadingDropDownNameValue> Makes = GetData(query);
    return Makes.ToArray();
}

[WebMethod]
public CascadingDropDownNameValue[] GetModels(string knownCategoryValues)
{
    string make = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["MakeId"];
    string query = string.Format("SELECT VehicleModelName, VehicleModelId FROM Models WHERE MakeId = {0}", make);
    List<CascadingDropDownNameValue> Models = GetData(query);
    return Models.ToArray();
}

private List<CascadingDropDownNameValue> GetData(string query)
{
   string conString = ConfigurationManager.ConnectionStrings["ConnectionStr"].ConnectionString;
    SqlCommand cmd = new SqlCommand(query);
    List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
    using (SqlConnection con = new SqlConnection(conString))
    {
        con.Open();
        cmd.Connection = con;
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                values.Add(new CascadingDropDownNameValue
                {
                    name = reader[0].ToString(),
                    value = reader[1].ToString()
                });
            }
            reader.Close();
            con.Close();
            return values;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM