如何在asp.net中使用某些条件绑定gridview?

如何在asp.net中使用某些条件绑定gridview?,asp.net,c#-4.0,Asp.net,C# 4.0,我已经在if()中写下了我的条件。我只想在网格中绑定满意的行。我怎么写呢?您不需要在数据表的行上绑定网格in循环,而是根据需要的条件过滤数据表,并绑定一次。您可以从数据表中获取DataView,并使用其属性应用日期过滤器 DataTable dtbind = new DataTable(); dtbind = objvehicleBAL.GetTaxdetails(); for (int i = 0; i < dtbind.Rows.Cou

我已经在if()中写下了我的条件。我只想在网格中绑定满意的行。我怎么写呢?

您不需要在数据表的行上绑定
网格
in循环,而是根据需要的条件过滤
数据表
,并绑定一次。您可以从数据表中获取
DataView
,并使用其属性应用日期过滤器

    DataTable dtbind = new DataTable();
        dtbind = objvehicleBAL.GetTaxdetails();

        for (int i = 0; i < dtbind.Rows.Count; i++)
        {
            DateTime dt1 = DateTime.ParseExact(dtbind.Rows[i]["todate"].ToString(), "dd/MM/yyyy", null);
            if (dt1 < ((DateTime.Now.AddDays(15))))
            {
                GVTax.DataSource = dtbind.Rows[i];
                GVTax.DataBind();

            }

        }

无需每次绑定每个
并调用
数据绑定
方法。 只需使用以下命令:

dtbind = objvehicleBAL.GetTaxdetails();  //Filter the record in GetTaxdetails 
DataView dv = dtbind.DefaultView; //or use DataView with RowFilter
dv .RowFilter = "todate = #"  + DateTime.Now.AddDays(15).ToString() + "#";
GVTax.DataSource = dv;
GVTax.DataBind();

希望这对你有帮助

您可以使用
DataTable
Select
方法以及筛选表达式来获取符合条件的行。然后,将其绑定到您的
GridView

protected void BindGrid()
{
        DataTable dtbind = new DataTable();
        dtbind=objvehicleBAL.GetTaxdetails();//get the rows filtered in SQL
        if(dtbind!=null && dtbind.Rows.Count>0)//always check for null for preventing exception
        {
          GVTax.DataSource = dtbind;
        }
        GVTax.DataBind();   
}
string filterExp=“todate
数据表dtbind1=objvehicleBAL.GetTaxdetails();
DataTable dtbind2=新DataTable();
foreach(dtbind1.Rows中的数据行)
{
DateTime dt1=DateTime.ParseExact(行[“todate”].ToString(),“dd/MM/yyyy”,null);
如果(dt1<((DateTime.Now.AddDays(15)))
dtbind2.Rows.Add(row);
}
}
GVTax.DataSource=dtbind2;
GVTax.DataBind();

您可以创建另一个datatable,并在第二个datatable中填充满足条件的行,并将gridview与第二个datatable绑定(已筛选行)


我收到以下错误:“数据源是无效类型。它必须是IListSource、IEnumerable或IDataSource”,以及上述代码,我如何解决它。我认为OP需要检查每个数据表行上的条件,并将其绑定到gridview。您认为在sql查询中添加筛选器会影响性能吗?尽管此解决方案可能有效!但我更喜欢使用DataView rowfilter,或者通过在sql查询中添加where子句来过滤服务器上的记录(这可以防止循环每一行并对其执行操作)。我认为您必须处理dtbind1或将其设置为null,因为它以后不再使用,因为您在dtbind2中得到的结果是正确的。。
string filterExp = "todate < dateadd(day,15,getdate())";
var filtered = dtBind.Select(filterExp);
GVTax.DataSource = filtered ;
GVTax.DataBind();
 DataTable dtbind1 = objvehicleBAL.GetTaxdetails();
 DataTable dtbind2 = new DataTable();

 foreach (DataRow row in dtbind1.Rows)
 {
     DateTime dt1 = DateTime.ParseExact(row["todate"].ToString(), "dd/MM/yyyy", null);
     if (dt1 < ((DateTime.Now.AddDays(15))))
          dtbind2.Rows.Add(row);
     }
 }

 GVTax.DataSource = dtbind2;
 GVTax.DataBind();
dttableNew  = dttableOld.Clone();  

            foreach (DataRow drtableOld in dttableOld.Rows)
            {
               if (/*put some Condition */)
               {
                  dtTableNew.ImportRow(drtableOld);
               }
            }

            GVTax.DataSource = dtTableNew;

           GVTax.DataBind();