【发布时间】: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