2013-08-30 44 views
0

我希望我的主题标题很有意义。如何将可用记录的数量添加到dropdownlist选项?

我们正在建立一个汽车经销商的网络应用程序,让潜在的汽车买家可以确定哪种汽车适合他们的预算和需求。

因此,我们有汽车制造,汽车模型,汽车状况,milage,价格范围等下拉列表。

下面的代码显示了汽车品牌的下拉列表。

当用户选择他/她的首选汽车制造商时,与该制造商相关的型号会自动加载到第二个下拉列表中。

<form id="form1" runat="server"> 
    <div> 
     <span style ="font-family:Arial">Select Make : </span> 
     <asp:DropDownList ID="ddlMake" runat="server" AutoPostBack = "true" OnSelectedIndexChanged="ddlMake_SelectedIndexChanged"> 
     <asp:ListItem Text = "------" Value = ""></asp:ListItem> 
     </asp:DropDownList> 
     <br /><br /> 
     <span style ="font-family:Arial">Select Model : </span> 
     <asp:DropDownList ID="ddlModel" runat="server" Enabled = "false" AutoPostBack = "true" OnSelectedIndexChanged="ddlModel_SelectedIndexChanged"> 
     <asp:ListItem Text = "------" Value = ""></asp:ListItem> 
     </asp:DropDownList> 
     <br /><br /> 
     <asp:button id="btnSave" runat="server" Text="Submit New Request"></asp:button><br /><br /> 
     <asp:Label ID="lblResults" runat="server" Text="" Font-Names = "Arial"></asp:Label>   
    </div> 
    </form> 



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
      If Not IsPostBack Then 
       ddlMake.AppendDataBoundItems = True 
       Dim strConnString As [String] = ConfigurationManager _ 
       .ConnectionStrings("amsconstr").ConnectionString 
       Dim strQuery As [String] = "select vehicleId, Make from MakeModel" 
       Dim con As New SqlConnection(strConnString) 
       Dim cmd As New SqlCommand() 
       cmd.CommandType = CommandType.Text 
       cmd.CommandText = strQuery 
       cmd.Connection = con 
       Try 
        con.Open() 
        ddlMake.DataSource = cmd.ExecuteReader() 
        ddlMake.DataTextField = "Make" 
        ddlMake.DataValueField = "vehicleId" 
        ddlMake.DataBind() 
       Catch ex As Exception 
        Throw ex 
       Finally 
        con.Close() 
        con.Dispose() 
       End Try 
      End If 
     End Sub 
    Protected Sub ddlMake_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
      ddlModel.Items.Clear() 
      ddlModel.Items.Add(New ListItem("--Select Model--", "")) 

      ddlModel.AppendDataBoundItems = True 
      Dim strConnString As [String] = ConfigurationManager _ 
         .ConnectionStrings("amsconstr").ConnectionString 
      Dim strQuery As [String] = "select vehicleId Employee from MakeModel " _ 
             & "where [email protected]" 
      Dim con As New SqlConnection(strConnString) 
      Dim cmd As New SqlCommand() 
      cmd.Parameters.AddWithValue("@vehicleId", _ 
           ddlMake.SelectedItem.Value) 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = strQuery 
      cmd.Connection = con 
      Try 
       con.Open() 
       ddlModel.DataSource = cmd.ExecuteReader() 
       ddlModel.DataTextField = "Model" 
       ddlModel.DataValueField = "VehicleId" 
       ddlModel.DataBind() 
       If ddlModel.Items.Count > 1 Then 
        ddlModel.Enabled = True 
       Else 
        ddlModel.Enabled = False 
       End If 
      Catch ex As Exception 
       Throw ex 
      Finally 
       con.Close() 
       con.Dispose() 
      End Try 
     End Sub 
    Protected Sub ddlModel_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

      Dim strConnString As [String] = ConfigurationManager.ConnectionStrings("conString").ConnectionString 
      Dim strQuery As [String] = "select VehicleId, Model from MakeModel where [email protected]" 
      Dim con As New SqlConnection(strConnString) 
      Dim cmd As New SqlCommand() 
      cmd.Parameters.AddWithValue("@vehicleId", ddlModel.SelectedItem.Value) 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = strQuery 
      cmd.Connection = con 
      Try 
       con.Open() 
      Catch ex As Exception 
       Throw ex 
      Finally 

       con.Close() 
       con.Dispose() 
      End Try 
    End Sub 

这工作正常。

我们想追加每辆汽车制造的可用记录数。

例如,在汽车下拉列表的制作,我们有这样的事:

马自达 梅塞德斯奔驰 丰田, 等

我们将让用户知道特定的品牌如何可以像:

Mazda (10) 
Mercedez Benz (2) 
Toyota (7) 

如何为特定品牌的汽车添加可用数量的汽车?

回答

0

更改您的SQL语句,以便返回您所需的全部内容。取而代之的只是:

select VehicleId, Model from MakeModel..... 

使用类似:

select VehicleId, (Model + '(' + (select count(*) from MakeModel B where a.ID=b.ID) + ')') as Make from MakeModel A... 

..这是不是很好,但会努力。使用SQL Server CTE来使代码更好。或者甚至更好地把最终代码放到存储过程中,而不是调用这个过程。

另外一个说明 - 尽量减少重复的代码。希望能帮助到你。

+0

@ivansivak,感谢,但我收到此错误: '转换为varchar值“)”为数据类型int.'时转换失败 –

1

您需要使用CONVERT()函数。

select VehicleId, (Model + '(' + CONVERT(NVARCHAR, (select count(*) from MakeModel B where a.ID=b.ID)) + ')') as Make from MakeModel A 
相关问题