【问题标题】:C# add filter parameters and expression to listview dynamicallyC#动态添加过滤器参数和表达式到listview
【发布时间】:2014-11-03 10:39:14
【问题描述】:

我想根据文本框动态设置列表视图的过滤,因为我隐含地不知道列的数量和名称。我通过创建 Texboxes,在后面的代码中设置 filterparams 和 filterexpression 来做到这一点 - 页面正在加载并正常工作,但在更改任何文本框中的文本后,listview 没有过滤。调试时,我看到所有 filterexpression 和 filtercontrols 都存在我期望的属性。我真的看不到任何错误,并会提供任何帮助。谢谢!

在 Page_Load 我有以下代码:

protected void Page_Load(object sender, EventArgs e)
    {

    // some code where I get datatable for my listview 
    // and put columns to tablecols

        tablecols = dtable.Columns;



    // creating of htmltablerow with textboxes for filtering

        HtmlTableRow htr_filterrow = new HtmlTableRow();
        htr_filterrow.ID = "filterrow"; 

        foreach (DataColumn col in tablecols)
        {
            HtmlTableCell htc = new HtmlTableCell();
            TextBox tb = new TextBox();
            tb.ID = "tb_" + col.ColumnName;

            htc.Controls.Add(tb);
            htr_filterrow.Controls.Add(htc);
        }

        placeholder_filterrow.Controls.Add(htr_filterrow);



    // setting filterparameters of my listview

        if (SqlDataSource1.FilterParameters.Count == 0)
        {
            foreach (DataColumn col in tablecols)
            {
                ControlParameter filter_par = new ControlParameter();
                filter_par.Name = col.ColumnName;
                filter_par.ControlID = "ListView1$tb_" + col.ColumnName + "";
                filter_par.PropertyName = "Text";
                SqlDataSource1.FilterParameters.Add(filter_par);
            }
        }



   // setting filterexpression for my listview

        string filter_express = "";
        int i = 0;

        foreach (DataColumn col in tablecols)
        {
            if (filter_express.Length == 0)
            {
                filter_express = filter_express + " ([" + col.ColumnName + "] like '*{" + i + "}*' or [" + col.ColumnName + "] is null)";
            }
            else
                filter_express = filter_express + " and ([" + col.ColumnName + "] like '*{" + i + "}*' or [" + col.ColumnName + "] is null)";
            i = ++i;
        }   

            SqlDataSource1.FilterExpression = filter_express;

    }

【问题讨论】:

    标签: c# asp.net listview filtering


    【解决方案1】:

    我终于找到了我的解决方案。它是 DefaultValue 设置为我错过的过滤器参数。如果没有 DefaultValue,这种方法仅适用于一个过滤器参数,但不适用于很多。

    在我的代码中进行此更改后,它开始工作。

    ControlParameter search_par = new ControlParameter();
    search_par.Name = "tb_search";
    search_par.ControlID = "tb_search";
    search_par.PropertyName = "Text";
    search_par.DefaultValue = "*";
    SqlDataSource1.FilterParameters.Add(search_par);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多