【问题标题】:Bind Rows From GridView to DataTable and Display It In Another GridView RSS将 GridView 中的行绑定到 DataTable 并在另一个 GridView RSS 中显示
【发布时间】:2015-12-23 02:57:50
【问题描述】:

我将从网格视图中的列中查找一个值。如果该列中有具有此值的行,我会将这些行添加到 DataTable。之后我会将它绑定到另一个 gridview 以显示这些行。但是,当我尝试这样做时,INT 中的列无法在 INT 中显示,而只能在 TEXT 中显示。此外,只有 1 行被绑定到数据表并显示在另一个网格视图中,如果很多行在该列中具有特定值,我想要很多行,而不仅仅是 1 行。

这是我使用的代码:

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

有人可以帮我解决这个问题吗?非常感谢!!

【问题讨论】:

  • GridView2.DataSource = dt; GridView2.DataBind();将这些行放在 foreach 循环块之外
  • 嗨,Amit,已尝试将这些行放在 foreach 循环块之外,但这次没有出现网格视图。

标签: c# asp.net gridview data-binding datatable


【解决方案1】:

您应该使用 GridView OnDataBound 事件而不是 RowDataBound。 RowDataBound 将在每行绑定到 Gridview 后触发,其中 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();
}

【讨论】:

  • 嗨 ram,已经尝试这样做并将这一行放在 aspx 文件下: .然后我将cs文件更改为您建议的内容,但发生了合规性错误。 “编译器错误消息:CS0123:GridView1_OnDataBound 没有重载匹配委托 'System.EventHandler'”
  • @FeliciaSoh 我使用了 GridViewRowEventArgs 而不是 EventArgs。请检查更新的代码
  • 嗨@ram hemasri,也试过这个,但在执行过程中出现了这个问题。 “编译器错误消息:CS0123:'ORSA_ASSESSMENTS_OnDataBound' 没有重载匹配委托 'System.EventHandler'”
  • @FeliciaSoh 请检查编辑后的代码。如果您仍然收到错误,请告诉我
  • 嗨,公羊!非常感谢你的帮助! :) 我设法将选定的行从 1 个 gridview 绑定到另一个 gridview!非常感谢!
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2014-12-22
  • 1970-01-01
相关资源
最近更新 更多