簡體   English   中英

C#動態向列表視圖添加過濾器參數和表達式

[英]C# add filter parameters and expression to listview dynamically

我想基於文本框動態設置對列表視圖的過濾,因為我隱式地不知道列的數量和名稱。 我是通過創建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;

    }

我終於找到了解決方案。 將DefaultValue設置為我錯過的filterparameters。 如果沒有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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM