Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多列筛选DataView_C#_Asp.net_Ado.net_Asp.net 2.0 - Fatal编程技术网

C# 使用多列筛选DataView

C# 使用多列筛选DataView,c#,asp.net,ado.net,asp.net-2.0,C#,Asp.net,Ado.net,Asp.net 2.0,在我的应用程序中,我使用dataview在动态传递筛选器选项的位置应用筛选器。如果有2个筛选器参数,则dataview应先筛选参数1,然后再筛选参数2。我使用的方法是在for循环中调用的,我使用列表框将计数设置为所选参数的总数,但只对最后一个参数进行过滤。 这是我的密码: string str = ""; for (int i = 0; i < listbox.Items.Count; i++) { if (listbox.Items[i].Selected) {

在我的应用程序中,我使用dataview在动态传递筛选器选项的位置应用筛选器。如果有2个筛选器参数,则dataview应先筛选参数1,然后再筛选参数2。我使用的方法是在for循环中调用的,我使用列表框将计数设置为所选参数的总数,但只对最后一个参数进行过滤。 这是我的密码:

string str = "";
for (int i = 0; i < listbox.Items.Count; i++)
{
    if (listbox.Items[i].Selected)
    {
        if (str != string.Empty)
        {
            str = str + "," + listbox.Items[i].Text;

        }
        else
        {
            str = str + listbox.Items[i].Text;
        }
    }
}

string[] items = str.Split(',');
for (int i = 0; i < items.Length; i++)
{
    ApplyFilter(items[i],dv);
}

private DataView ApplyFilter(string str,DataView newdv)
{
    newdv.RowFilter = "[" + str + "]=" + ddl.SelectedItem.ToString();

    return newdv;
}
string str=”“;
对于(int i=0;i
请提供合适的解决方案


提前感谢…

您应该完全应用您的过滤器,而不是逐个应用:

newdv.RowFilter = "Column1 = " + value1 + " AND Column2 = " + value2;
因此,您可以将代码更改为:

string[] items = str.Split(',');
string filter = string.Empty;
for (int i = 0; i < items.Length; i++)
{
    filter += items[i] + " = " + dropdown.SelectedValue;
    if (i != items.Length - 1)
    {
         filter += " AND ";
    }
}
newdv.RowFilter = filter;
string[]items=str.Split(',');
string filter=string.Empty;
对于(int i=0;i
我认为您应该构建一个完整的筛选器字符串,然后将此筛选器设置为您的DataView。 例如:


StringBuilder sb = new StringBuilder()
for (int i = 0; i < listbox.Items.Count; i++) {
  if (!listbox.Items[i].Selected) {
    continue;
  }

  if (sb.Length > 0) {
    sb.Append(" and ");
  }
  sb.AppendFormat("[{0}] = {1}", listbox.Items[i].Text, ddl.SelectedItem);
}

dv.RowFilter = sb.ToString();

StringBuilder sb=新的StringBuilder()
对于(int i=0;i0){
某人附加(“及”);
}
sb.AppendFormat(“[{0}]={1}”,listbox.Items[i].Text,ddl.SelectedItem);
}
dv.RowFilter=sb.ToString();

我有一个类似的问题,但我认为解决方案对他们两人都是一样的。我有一个数据表,需要由5个控件进行过滤,如果它们没有填充,就不应该进行过滤

List<string> allParams = new List<string>();
//here add fields you want to filter and their impact on rowview in string form
if (tsPrzelewyTxtOpis.Text != ""){ allParams.Add("Opis like  '%" + tsPrzelewyTxtOpis.Text + "%'"); }
if(tsPrzelewyTxtPlatnik.Text != ""){ allParams.Add("Płacący like  '%" + tsPrzelewyTxtPlatnik.Text + "%'"); }
if(tsPrzelewyDropDownKonto.Text != "") { allParams.Add("Konto =  '" + tsPrzelewyDropDownKonto.Text + "'"); }
if (tsPrzelewyDropDownWaluta.Text != "") { allParams.Add("Waluta =  '" + tsPrzelewyDropDownWaluta.Text + "'"); }
if (tsPrzelewyDropDownStatus.Text != "") { allParams.Add("Status =  '" + tsPrzelewyDropDownStatus.Text + "'"); }

string finalFilter = string.Join(" and ", allParams);
if (finalFilter != "")
{ (dgvPrzelewy.DataSource as DataTable).DefaultView.RowFilter = "(" + finalFilter + ")"; }
else
{ (dgvPrzelewy.DataSource as DataTable).DefaultView.RowFilter = ""; }
List allParams=new List();
//此处以字符串形式添加要筛选的字段及其对rowview的影响
if(tsPrzelewyTxtOpis.Text!=“”){allParams.Add(“Opis like“%”+tsPrzelewyTxtOpis.Text+“%”;”
if(tsPrzelewyTxtPlatnik.Text!=“”){allParams.Add(“Płacący like“%”+tsPrzelewyTxtPlatnik.Text+“%”;”
if(tsPrzelewyDropDownKonto.Text!=“”){allParams.Add(“Konto=”+tsPrzelewyDropDownKonto.Text+“”);}
if(tsPrzelewyDropDownWaluta.Text!=“”){allParams.Add(“Waluta=”+tsPrzelewyDropDownWaluta.Text+”);}
if(tsPrzelewyDropDownStatus.Text!=“”){allParams.Add(“Status=”+tsPrzelewyDropDownStatus.Text+“”);}
string finalFilter=string.Join(“and”,allParams);
如果(最终过滤器!=“”)
{(dgvPrzelewy.DataSource作为数据表)。DefaultView.RowFilter=“(“+finalFilter+”)”;}
其他的
{(dgvPrzelewy.DataSource作为数据表)。DefaultView.RowFilter=“”;}

但我不确定将传递多少个筛选器参数。如何在同一行筛选器中添加列
List<string> allParams = new List<string>();
//here add fields you want to filter and their impact on rowview in string form
if (tsPrzelewyTxtOpis.Text != ""){ allParams.Add("Opis like  '%" + tsPrzelewyTxtOpis.Text + "%'"); }
if(tsPrzelewyTxtPlatnik.Text != ""){ allParams.Add("Płacący like  '%" + tsPrzelewyTxtPlatnik.Text + "%'"); }
if(tsPrzelewyDropDownKonto.Text != "") { allParams.Add("Konto =  '" + tsPrzelewyDropDownKonto.Text + "'"); }
if (tsPrzelewyDropDownWaluta.Text != "") { allParams.Add("Waluta =  '" + tsPrzelewyDropDownWaluta.Text + "'"); }
if (tsPrzelewyDropDownStatus.Text != "") { allParams.Add("Status =  '" + tsPrzelewyDropDownStatus.Text + "'"); }

string finalFilter = string.Join(" and ", allParams);
if (finalFilter != "")
{ (dgvPrzelewy.DataSource as DataTable).DefaultView.RowFilter = "(" + finalFilter + ")"; }
else
{ (dgvPrzelewy.DataSource as DataTable).DefaultView.RowFilter = ""; }