繁体   English   中英

如何在下面的代码中从foreach循环内的datarow行中删除row [6]?

[英]How can I delete row[6] from datarow row inside foreach loop in the code below?

我有一个DataTable dt ,我试图在其中添加两列。 我成功了。 但是,当我尝试在获取数据后删除row [6]时,我面临着删除该行的问题。 我正在寻找一种删除特定行的方法。

protected void gvTimeSheet_DataBound(object sender, EventArgs e)   
{
    DataTable dt = new DataTable();
    int intUserID = TypeConvert.IsNullInt32(ddlUsers.SelectedValue, 0);
    DateTime fromDate = Convert.ToDateTime(UCFromDate.selectedDate);
    DateTime toDate = Convert.ToDateTime(UCToDate.selectedDate);
    string strQuery = "EXEC SPRptUserTimeSheet_AP @User=" + intUserID + ",@dateFrom='" + fromDate + "',@dateTo='" + toDate + "'";
    dt = DataHelper.ExecuteQuery(strQuery);
    dt.Columns.Add("Booked Hrs");
    dt.Columns.Add("Time Zone");



    foreach (DataRow row in dt.Rows)
    {
        string userName = row[0].ToString();
        string bookedHr = row[6].ToString();
        string timezone = row[7].ToString();

        if (userName == string.Empty)
        {
            row[0] = ddlUsers.SelectedItem.Text;
        }

        if (bookedHr == string.Empty)
        {
            row["Booked Hrs"] = 0.0;
        }
        if (bookedHr != string.Empty)
        {
            row["Booked Hrs"] = objCommon.fnGetEffortInHrMinFormat(Convert.ToInt32(bookedHr));
        }

        if (timezone == "0")
        {
            row["Time Zone"] = "Offshore";

        }
        if (timezone == "1")
        {
            row["Time Zone"] = "Onsite";
        }

    }
    ViewState["dtExport"] = dt;
}
}

您尝试执行的操作实际上没有任何意义:

要了解原因 ,您需要考虑表达式row[6]真正含义。 它的意思是

此行中第6列的值。

因此,从行中实际删除第6列的唯一方法是从表中删除它:

dt.Columns.RemoveAt(6);

那将摆脱该列。 但是,您已经删除了所有行。

因此,您不能在foreach循环中执行此操作。 如果这样做,您将删除

  • 第一次第六列
  • 第二次(本来)第7列,并且
  • 第三遍循环(第8列)
  • 等等..

除非有例外,否则您将尝试删除Column集合范围之外的列。

因此,如果您确实必须摆脱第6列,请在循环后执行。

如果从集合中删除项目,则该集合已更改,您无法继续通过foreach枚举,而不能使用for循环。

添加代码段,

for(int i = dt.Rows.Count; i >= 0; i--)
{
    DataRow dr = dt.Rows[i];
if(i==6||i==7)
{
 dr.Delete();
}

}

我的建议是使用for循环而不是foreach循环。 尝试这个

for (int i =dt.Rows.Count-1; i >= 0; i--) 
{
   if (true) 
   {
      dt.Rows[i].Delete();
   }
}
dt.AcceptChanges();
ViewState["dataTable"]=dt;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM