我正在尝试使用手动创建的数据表填充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表中只有一列。稍后我会添加更多列。
答案 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);
}