Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在下面的代码中,如何从foreach循环内的datarow行中删除行[6]?_C#_Asp.net - Fatal编程技术网

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

C# 在下面的代码中,如何从foreach循环内的datarow行中删除行[6]?,c#,asp.net,C#,Asp.net,我有一个DataTable dt,我试图在其中再添加两列。我成功了。但是,当我在获取数据后尝试删除第[6]行时,我将面临删除该行的问题。我正在寻找删除特定行的方法 protected void gvTimeSheet_DataBound(object sender, EventArgs e) { DataTable dt = new DataTable(); int intUserID = TypeConvert.IsNullInt32(ddlUsers.SelectedV

我有一个
DataTable dt
,我试图在其中再添加两列。我成功了。但是,当我在获取数据后尝试删除第[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;
}
}

您试图做的事情没有真正意义:

为了理解为什么,你需要考虑表达式<代码>行[6 ] < /代码>的真正含义。这意味着

此行第6列的值

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

dt.Columns.RemoveAt(6);
这样就可以摆脱这个专栏了。但是,您已经为所有行删除了它

因此,您不能在
foreach
循环中执行此操作。如果你这样做了,你会移除

  • 第六栏第一次
  • 第二次(原始)第7列,以及
  • (最初)第8列第三次通过循环
  • 等等
除非出现异常,即您试图删除列集合边界之外的列


因此,如果您确实必须删除第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;

其中是额外两列的删除代码..我想在foreach循环中删除。我不想删除额外的列。我只想删除foreach循环中的第[6]行和第[7]行。Kutty Rajesh Valangaihere您在DataTable中添加了两列您想在foreach循环中删除的内容,,,,是的,我添加了两列。但是当我在foreach循环中得到第[6]行和第[7]行的值时,我想删除第[6]行和第[7]行。我认为他不是要从表中删除dt.第[6]行,而是要删除该行的第6列和第7列。感谢您的帮助kutty rajesh valangai,但它会删除datatable的第6行和第7行。但我想删除每个数据表行的第6行和第7行。@babluParhi-您想删除
行[6]
,这是一个字段。将其描述为“一行中的一行”非常令人困惑。耶..对,汉斯·凯斯汀..我想删除该字段。。那我该怎么做呢?不,praveen它会从dt中删除。你想删除datatable的第6行和第7行位置吗?不,我想删除datarow@praveenya的第6行和第7行位置,我尝试了这个…但它会删除datatable的第6行和第7行,但我必须删除datarow的第6行和第7行字段@praveen是否要删除数据行的特定单元格(字段)或列?