来自下拉列表的gridview中的数据绑定

时间:2013-09-03 20:43:56

标签: asp.net gridview data-binding

我的网络表单上有两个下拉列表。 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绑定数据但失败了。

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

2 个答案:

答案 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事件处理程序方法中。