我的网络表单上有两个下拉列表。 dlName和dlStage。我有一个gridview需要基于从这两个下拉列表中选择的值。目前,我没有过滤gridview,我使用以下代码:
private void BindData()
{
string query = "select [AnnotationNumber],[AnnotationBy],[AnnotationType],[BusinessUnit] as Unit,[ErrorType],[ActualAgencyError],AnnotationComments,[sgkComments],[ActualAgencyError],Cust,Name,AnnotationDate from vw_GridviewSource ";
SqlCommand cmd = new SqlCommand(query);
gvSummary.DataSource = GetData(cmd);
gvSummary.DataBind();
}
我想要做的是让gridview始终检查下拉菜单并根据下拉列表中的值绑定数据。
在select语句的末尾,两个值Name和AnnotationDate是需要匹配的变量。我将它们包含在查询中,因为我试图使用datakey绑定数据但失败了。
我对此很陌生,所以我可以尽可能地使用所有帮助。
答案 0 :(得分:1)
试试这个:
// Both drop down lists need a selected value or we don't do the query and bind
if(!String.IsNullOrEmpty(dlName.SelectedValue) &&
!String.IsNullOrEmpty(dlStage.SelectedValue)
{
string selectedName = dlName.SelectedValue;
string selectedAnnotationDate = dlStage.SelectedValue;
// Use parameterized SQL instead of in-line SQL to avoid SQL Injection risks
SqlCommand cmd = new SqlCommand();
cmd.Connection = YourConnectionObject;
cmd.CommandText = "select [AnnotationNumber],[AnnotationBy],[AnnotationType],
[BusinessUnit] as Unit,[ErrorType],[ActualAgencyError],AnnotationComments,
[sgkComments],[ActualAgencyError],Cust,Name,AnnotationDate from
vw_GridviewSource where Name = @p1 and AnnotationDate = @p2";
cmd.Parameters.Add("@p1", SqlDbType.VarChar, 100, selectedName);
cmd.Parameters.Add("@p2", SqlDbType.VarChar, 100, selectedAnnotationDate);
gvSummary.DataSource = GetData(cmd);
gvSummary.DataBind();
}
注意:替换上面@p1
和@p2
的正确数据库类型和大小。
答案 1 :(得分:0)
这应该很容易实现。这是ASP.NET将为您轻松处理的事情。
首先,打开DropDownLists上的AutoPostBack
。在ASPX标记中,在每个DDL标记内添加AutoPostBack="True"
(您看到ID
设置的同一行和runat="server"
)。
或者,如果您希望用户进行选择,然后更新GridView,您可以添加一个按钮并处理该事件。在这种情况下,AutoPostBack
不是必需的。
其次,您需要处理DDL选择的更改或按钮单击。
如果您使用DDL上的AutoPostBack
,请确保处理每个DDL SelectedIndexChanged
事件。
如果您使用Button路线,请处理Button的Click
事件。
这是两条路线汇合的地方。您需要修改BindData
方法,为每个DDL选择的项目接受两个新参数,如下所示:
private void BindData(string parameter1, string parameter2)
(您将需要使用更多描述性变量名称)
进入内部后,您需要更新查询以使用参数化查询。当我输入这个时,@ Karl Anderson添加了一个在这里很有用的答案。用他的例子。
最后,您需要返回到您的活动,并将每个DDL的选定项目传递给他们的SelectedIndexChanged事件处理程序。
如果你去DDL AutoPostBack路线,这应该有效:
BindData(ddl1.SelectedValue, ddl2.SelectedValue);
(这将进入每个SelectedIndexChanged
事件处理程序方法)
如果你去按钮路线,将上面的代码放在Click
事件处理程序方法中。