温馨提示:本文翻译自stackoverflow.com,查看原文请点击:asp.net - Returning a selected value based on drop down list
asp.net vb.net

asp.net - 根据下拉列表返回选定的值

发布于 2020-03-27 11:27:23

所以我有一个订单数据库。我最近在gridview中添加了一个与会计年度相关的列。我还在上面添加了一个下拉列表,其中列出了2019、2020、2021年。我要这样做,以便每当有人选择年份之一时,它只会在网格视图中返回与下拉列表中的会计年度匹配到该列中的会计年度的订单。我没有与会计年度匹配的SQL列...是否需要?我不知道它是否一定需要捕获和捕获的东西一样多,以使其更易于浏览数据。例如,用户填写2020会计年度的订单。下拉列表将仅显示FY列2020的行。

     <asp:DropDownList ID="DDYear" runat="server" AutoPostBack="True" >
      <asp:ListItem Value="1">2019</asp:ListItem>
      <asp:ListItem Value="2">2020</asp:ListItem>
      <asp:ListItem Value="3">2021</asp:ListItem>
  </asp:DropDownList>


    Dim con As New SqlClient.SqlConnection(Constraint)
    Dim cmd As New SqlClient.SqlCommand("SELECT PurchaseOrder.PoId, PurchaseOrder.Vendor_Name, PurchaseOrder.POAmount,PurchaseOrder.DateFrom, PurchaseOrder.DateTo, PurchaseOrder.Balance, PurchaseOrder.CodeId, PurchaseOrder.PoNumber, PurchaseOrder.FiscalYear, BPNumber, ClassCode.CodeId AS Expr1, ClassCode.CodeDefinition, PurchaseOrder.Notes FROM PurchaseOrder INNER JOIN ClassCode ON PurchaseOrder.CodeId = ClassCode.CodeId")

    Try
        con.Open()
        Dim sda As New SqlDataAdapter(cmd)
        Dim ds As New DataSet()
        sda.Fill(ds)
        DDYear.DataSource = ds
        DDYear.DataValueField = "2019,2020,2021"
        DDYear.DataBind()
        con.Close()
    Catch ex As Exception

获取OnRowCancelingEdit不是元素DetailsView的有效属性

查看更多

查看更多

提问者
Joe Black
被浏览
134
S. MacKenzie 2019-07-03 22:45

听起来您想根据在下拉列表中选择的年份来过滤gridview。在您的SQL中,您可以根据DateFrom,DateTo或两者将一个where子句添加到SQL中,例如:

Where DatePart(YEAR, PurchaseOrder.DateFrom) = @Year

然后向您的查询添加参数:

Dim cmd As ... 
Dim intYear as Integer = DDYear.SelectedValue 'Get the year
cmd.Parameters.Add("@Year",  SqlDbType.Int) 'Make a Parameter
cmd.Parameters("@Year").Value = intYear  'Fill parameter value

代码中的一个问题是您将DDYear重新绑定到新列表,但是DDYear只是年份的下拉列表。您可能想要做类似的事情:

删除此:

DDYear.DataSource = ds
DDYear.DataValueField = "2019,2020,2021"
DDYear.DataBind()

并添加以下内容:

Dim gvw As GridView = myGridView 'use your gridview name
gvw.DataSource = ds
gvw.DataBind()

这将非常有效,只返回选定年份的行,并且会加载gridview而不是包含新行的下拉列表。将您的代码添加到的OnSelectedIndexChanged事件中DDYear每当您在下拉列表中更改年份时,都会触发它刷新gridview。

如果您需要其中FiscalYear是使用日期的行,请使用该字段代替DateFrom。如果您需要在一年之内有开始或结束日期的采购订单,则可以使用相同的方式使用DatePart将OR添加到上述的Where子句中。