0

我的网络表单上有两个下拉列表。dlName 和 dlStage。我有一个网格视图,它需要基于从这两个下拉列表中选择的值。目前,我没有过滤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 是需要匹配的变量。我将它们包含在查询中是因为我试图使用数据键来绑定数据但失败了。

我对此很陌生,所以我可以使用所有可能的帮助。

4

2 回答 2

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以上。

于 2013-09-03T20:58:45.630 回答
0

这应该很容易实现。这是 ASP.NET 将为您轻松处理的事情。

首先,打开AutoPostBackDropDownLists。在 ASPX 标记中,AutoPostBack="True"在每个 DDL 标记内添加(您可以看到ID设置和的同一行runat="server")。

或者,如果您希望用户做出他/她的选择然后更新 GridView,您可以添加一个按钮并处理该事件。在这种情况下,AutoPostBack就没有必要了。

其次,您需要处理 DDL 选择或按钮单击的更改。

如果您使用AutoPostBackDDL,请确保您处理每个 DDLSelectedIndexChanged事件。

如果您使用 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事件处理方法中。

于 2013-09-03T21:02:29.147 回答