[英]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.