在我的网页中,我实现了一项功能,可以将工作表任务详细信息从弹出窗口添加/更新到页面级别的转发器,并在最终保存点击时保存到数据库。用户可以通过弹出窗口向中继器添加/更新新的任务详细信息。因此,每当我检索和更新viewstate时,我都会在viewstate数据表中管理用户信息。我的问题是,当用户编辑任何特定的行,然后我只想存储该数据行,所以让我们假设我已经在转发器中有两行然后我遍历数据表然后我有if ... else块检查匹配的记录,如果我发现匹配的记录我将用户输入的信息更新到网格,同时我将这个数据行存储到对象或数据行,但是在下一次迭代时,它执行了其余行的Rows.Add操作,此时它还更新了我的变量记录。每次返回两行,而它应该只检索存储在对象内的单行,即使viewstate在这种情况下失败。我不知道dotnet的这种行为,请让我知道我的逻辑是否错误或者这种行为可能是什么原因?
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr, drEditedRow;
if (string.IsNullOrEmpty(hfIndex.Value))
hfIndex.Value = "0";
if (Convert.ToInt32(hfIndex.Value) == i)
{
dr = dtedit.NewRow();
dr["iSrNo"] = dt.Rows[i]["iSrNo"];
dr["WorkSheet_Id"] = dt.Rows[i]["WorkSheet_Id"];
dr["Work On Date"] = txtWork_On_Date.Text.Trim();
dr["WorkSheet_Detail_Id"] = dt.Rows[i]["WorkSheet_Detail_Id"];
dr["Description"] = txtWorkSheet_Desc.Text.Trim();
-----
dtedit.Rows.Add(dr);
DataRow drEditedRow = dr; // Here i stored edited row to datarow object
}
else
{
dr = dtedit.NewRow();
dr["iSrNo"] = dt.Rows[i]["iSrNo"];
dr["WorkSheet_Id"] = dt.Rows[i]["WorkSheet_Id"];
dr["Work On Date"] = dt.Rows[i]["Work On Date"];
dr["WorkSheet_Detail_Id"] = dt.Rows[i]["WorkSheet_Detail_Id"];
dr["Description"] = dt.Rows[i]["Description"];
-----
dtedit.Rows.Add(dr); //
}
}
// here i using drEditedRow for Linq query
// it should return single row that i have stored in drEditedRow but instead it returns
// all the rows in datatable because when i debug
// i found it automatic updating records after each Else block dtedit.Rows.Add(dr) execution
希望现在明白