2015-09-25 70 views
0

我将从gridview中的列中查找值。如果在该列中具有该值的行,我会将这些行添加到DataTable中。之后我会将它绑定到另一个gridview来显示这些行。但是,当我尝试这样做时,INT中的列不能在INT中显示,但只能在TEXT中显示。另外,只有一行被绑定到数据表中,并在另一个gridview中显示出来,如果许多行在该列中具有特定值,而不仅仅是一行,则需要许多行。将行从GridView绑定到DataTable并在另一个GridView中显示它

这是我使用的代码:

public void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e) 
     { 
DataTable dt = new DataTable(); 
      DataRow dr; 
      dt.Columns.Add(new DataColumn("DATE")); 
      dt.Columns.Add(new DataColumn("CODE")); 
      dt.Columns.Add(new DataColumn("PERSON_NAME")); 
      dt.Columns.Add(new DataColumn("STATUS")); 
      dt.Columns.Add(new DataColumn("HOBBIES")); 
      dt.Columns.Add(new DataColumn("SCORE")); 
      dt.Columns.Add(new DataColumn("ITEM")); 
      dt.Columns.Add(new DataColumn("QUANTITY")); 
      dt.Columns.Add(new DataColumn("TYPE")); 
      dt.Columns.Add(new DataColumn("RATING")); 
      dt.Columns.Add(new DataColumn("PRICE")); 
      foreach (GridViewRow gvr in GridView1.Rows) 
      { 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        if (Convert.ToString(DataBinder.Eval(e.Row.DataItem, "STATUS")) == "Regular") 
        { 
         dr = dt.NewRow(); 
         dr["DATE"] = e.Row.Cells[0].Text; 
         dr["CODE"] = e.Row.Cells[1].Text; 
         dr["PERSON_NAME"] = e.Row.Cells[2].Text; 
         dr["STATUS"] = e.Row.Cells[3].Text; 
         dr["HOBBIES"] = e.Row.Cells[4].Text; 
         dr["SCORE"] = e.Row.Cells[5].Text; 
         dr["ITEM"] = e.Row.Cells[6].Text; 
         dr["QUANTITY"] = e.Row.Cells[7].Text; 
         dr["TYPE"] = e.Row.Cells[8].Text; 
         dr["RATING"] = e.Row.Cells[9].Text; 
         dr["PRICE"] = e.Row.Cells[10].Text; 
         dt.Rows.Add(dr); 
         GridView2.DataSource = dt; 
         GridView2.DataBind(); 
        } 

是否有人可以帮助我在此?非常感谢!!

+0

GridView2.DataSource = dt; GridView2.DataBind();将这些行放在foreach循环块之外 –

+0

嗨Amit,试图将这些行放在foreach循环块之外,但这次没有出现网格视图。 –

回答

2

您应该使用GridView OnDataBound事件而不是RowDataBound。在每行绑定到Gridview之后,RowDataBound将被触发,其中OnDataBound将在所有行绑定到Gridview后被调用。请尝试以下方法

public void GridView1_OnDataBound(object sender, EventArgs e) 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr; 
    dt.Columns.Add(new DataColumn("DATE")); 
    dt.Columns.Add(new DataColumn("CODE")); 
    dt.Columns.Add(new DataColumn("PERSON_NAME")); 
    dt.Columns.Add(new DataColumn("STATUS")); 
    dt.Columns.Add(new DataColumn("HOBBIES")); 
    dt.Columns.Add(new DataColumn("SCORE")); 
    dt.Columns.Add(new DataColumn("ITEM")); 
    dt.Columns.Add(new DataColumn("QUANTITY")); 
    dt.Columns.Add(new DataColumn("TYPE")); 
    dt.Columns.Add(new DataColumn("RATING")); 
    dt.Columns.Add(new DataColumn("PRICE")); 
    foreach (GridViewRow gvr in GridView1.Rows) 
    { 
     if (gvr.Cells[3].Text == "Regular") 
     { 
      dr = dt.NewRow(); 
      dr["DATE"] = gvr.Cells[0].Text; 
      dr["CODE"] = gvr.Cells[1].Text; 
      dr["PERSON_NAME"] = gvr.Cells[2].Text; 
      dr["STATUS"] = gvr.Cells[3].Text; 
      dr["HOBBIES"] = gvr.Cells[4].Text; 
      dr["SCORE"] = gvr.Cells[5].Text; 
      dr["ITEM"] = gvr.Cells[6].Text; 
      dr["QUANTITY"] = gvr.Cells[7].Text; 
      dr["TYPE"] = gvr.Cells[8].Text; 
      dr["RATING"] = gvr.Cells[9].Text; 
      dr["PRICE"] = gvr.Cells[10].Text; 
      dt.Rows.Add(dr); 

     } 
    } 
    GridView2.DataSource = dt; 
    GridView2.DataBind(); 
} 
+0

您好ram,试图这样做,并将此行放在aspx文件下:。然后,我改变了你建议的cs文件,但发生了合规性错误。 “编译器错误消息:CS0123:没有为GridView1_OnDataBound重载'匹配委托'System.EventHandler'” –

+0

@FeliciaSoh我已经使用GridViewRowEventArgs而不是EventArgs。请检查更新后的代码 –

+0

hi @ram hemasri,试过这个,但是这个问题发生在执行过程中。 “编译器错误消息:CS0123:'ORSA_ASSESSMENTS_OnDataBound'没有重载匹配委托'System.EventHandler'” –