DataTable Manual Rows Insert:此行已属于此表

时间:2017-01-17 07:46:27

标签: c# for-loop gridview datatable

我正在尝试使用手动创建的数据表填充gridview。我有两张桌子,一张是" hr_vacancy"第二个是" hr_profile"。有匹配的列" '指定' '规模'在hr_vacancy中有一个专栏' working'。

我必须在gridview中显示依赖于' working'数量。如果在工作中我有(例如3个数量),那么我将检查配置文件天气中有3个配置文件插入相同的'指定'其中有3个数量在&hr; vacancy.working'柱。

我们假设如果输入了两个配置文件,则gridview将显示来自< hr_profile'的两个记录。并且只有一个空行。我写了一些附加的代码。但当我绑定新的' dr'对于数据表,它显示错误,该行已经属于此表'

User user = new User();
Util myUtil = new Util();
DbManager dbManager = new DbManager();
string strSQL = "";

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dttempEmployee = new DataTable("TempEmployee");
        strSQL = "Select hfmiscode from profile where hfmiscode='1'";
        dttempEmployee = dbManager.FillDataTable(strSQL);
        DataRow dr = dttempEmployee.NewRow();

        strSQL = "select * from hr_vacancy where hfmiscode='398101' order by CONVERT(int, scale) desc";
        DataTable dtVacancy = dbManager.FillDataTable(strSQL);

        if (dtVacancy.Rows.Count > 0)
        {
            int intRowCountVacancy=0;
            string strDesignation = string.Empty;
            string strWorking = string.Empty;

            intRowCountVacancy = dtVacancy.Rows.Count;

            for (int i = 0; i < intRowCountVacancy; i++)
            {
                strDesignation = Convert.ToString(dtVacancy.Rows[i]["Designation"]);
                strWorking = Convert.ToString(dtVacancy.Rows[i]["working"]);

                for (int j = 0; j < Convert.ToInt32(strWorking); j++)
                {
                    strSQL = "select * from profile where hfmiscode='398101' and designation='" + strDesignation +"'";
                    DataTable dtProfileGet = dbManager.FillDataTable(strSQL);

                    if (dtProfileGet.Rows.Count > 0 || dtProfileGet.Rows.Count == Convert.ToInt32(strWorking))
                    {
                        if (j != Convert.ToInt32(strWorking))
                        {
                           // dttempEmployee.NewRow();

                            if (dtProfileGet.Rows[j]["hfmiscode"] == DBNull.Value)
                            {
                                dr["hfmiscode"] = "-";
                            }
                            else
                            {
                                dr["hfmiscode"] = Convert.ToString(dtProfileGet.Rows[j]["hfmiscode"]);
                            }
                        }
                    }
                    else
                    {
                        if (j != Convert.ToInt32(strWorking))
                        {
                               // dttempEmployee.NewRow();
                                dr["hfmiscode"] = "-";
                        }
                    }
                    dttempEmployee.Rows.Add(dr);
                }
            }
        }
        GridView1.DataSource = dttempEmployee;
        GridView1.DataBind();
    }
}

注意:我使用了&#39; hfmiscode&#39; hr_profile表中只有一列。稍后我会添加更多列。

1 个答案:

答案 0 :(得分:0)

当你执行datatable.NewRow()时,它在datatable中创建,其中包含所有列的默认值。它返回新创建的datarow对象,您需要使用适当的值填充列。

这里的问题是你在for循环之外有datatable.NewRow()语句,在for循环中调用了datatable.Row.Add。 所以基本上你试图多次添加同一行。

你需要在内部for循环中移动datatable.NewRow()语句,如下所示。

 for (int j = 0; j < Convert.ToInt32(strWorking); j++)
 {
    var dr = dttempEmployee.NewRow();

    // Other logic

    dttempEmployee.Rows.Add(dr);
 }