因此,我有一个用于订单的数据库。我最近在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的有效属性
答案 0 :(得分:0)
听起来您想根据在下拉列表中选择的年份来过滤表格视图。在您的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
的{{1}}事件中。每当您在下拉列表中更改年份时,都会触发它刷新gridview。
如果您需要使用FiscalYear作为日期的行,请使用该字段代替DateFrom。如果您需要在一年之内有开始或结束日期的采购订单,则可以使用相同的方式使用DatePart将OR添加到上述Where子句中。