2014-06-19 4 views
2
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(); 

      } 

     } 

if()에서 조건을 작성했습니다. 그리드에서 만족 된 행만 바인드하고 싶습니다. 이것을 어떻게 쓸 수 있습니까?asp.net에서 일부 조건으로 gridview를 바인딩하는 방법?

+0

바인딩 할 수 있습니다 데이터 소스가 유효하지 않습니다. 위의 코드와 함께 IListSource, IEnumerable 또는 IDataSource 중 하나 여야합니다. 어떻게 해결할 수 있습니까? – santhosha

답변

1
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(); 
+0

이 솔루션을 사용할 수 있습니다! 하지만 DataView rowfilter 또는 SQL 쿼리에서 where 절을 추가하여 서버의 레코드를 필터링하는 것을 선호합니다. 이렇게하면 각 행을 반복하여 연산을 수행 할 필요가 없습니다. 그리고 나는 u가 처분하거나 dtbind2를 null로 설정해야한다고 생각합니다. 나중에 더 이상 사용되지 않아서 dtbind2에서 결과를 얻었습니다. –

2

당신은 오히려 당신이 원하는 조건하여 DataTable을 필터링 한 번 바인딩 데이터 테이블의 행에 루프에서 Grid을 결합 할 필요가 없습니다. 데이터 표에서 DataView을 가져와 속성 DataView.RowFilter을 사용하여 날짜 필터를 적용 할 수 있습니다.

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(); 
1

row을 결합하고 DataBind를 호출 할 필요는 때마다 mehtod. 다음을 사용하십시오.

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(); 
} 

희망이 있습니다.

+0

OP는 각 데이터 테이블 행의 조건을 확인하고 gridview에 바인드해야한다고 생각합니다. –

+0

대신 uql 쿼리에서 필터를 추가하면 성능이 저하 될 것이라고 생각하십니까? –

1

필터링 표식과 함께 DataTableSelect 방법을 사용하면 조건에 맞는 행을 얻을 수 있습니다. 그런 다음 GridView에 연결합니다.

string filterExp = "todate < dateadd(day,15,getdate())"; 
var filtered = dtBind.Select(filterExp); 
GVTax.DataSource = filtered ; 
GVTax.DataBind(); 
0

당신은 다른 데이터 테이블을 작성하고 두 번째 데이터 테이블에서 조건을 만족하는 행을 작성하고 내가이 오류 "를 얻고 두 번째 데이터 테이블 (필터링 한 행)와 함께있는 gridview

dttableNew = dttableOld.Clone(); 

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

      GVTax.DataSource = dtTableNew; 

      GVTax.DataBind(); 
관련 문제