C# 从datatable中筛选asp.net中某列的数据

C# 从datatable中筛选asp.net中某列的数据,c#,asp.net,filter,datatable,C#,Asp.net,Filter,Datatable,我有一个数据表,它可以获取一些记录。因此,有一个列名为UPDATED_STATUS。在该列中,将显示“拍摄前”或“拍摄后”值 所以我想要的是,这些值中的任何一个都应该在该列中,然后只有它应该向前移动,否则它应该在 拍摄前或拍摄后都可以是他们的选择 下面是供参考的示例图像 下面是获取带有更新的_STATUS列的数据表的代码 你在找这样的人吗 foreach (DataRow row in dtStatus.Rows) { if (string.IsNullOrEmpty(Convert.ToS

我有一个数据表,它可以获取一些记录。因此,有一个列名为UPDATED_STATUS。在该列中,将显示“拍摄前”或“拍摄后”值

所以我想要的是,这些值中的任何一个都应该在该列中,然后只有它应该向前移动,否则它应该在

拍摄前或拍摄后都可以是他们的选择

下面是供参考的示例图像

下面是获取带有更新的_STATUS列的数据表的代码


你在找这样的人吗

foreach (DataRow row in dtStatus.Rows)
{
  if (string.IsNullOrEmpty(Convert.ToString(row["UPDATED_STATUS"])) || 
     (Convert.ToString(row["UPDATED_STATUS"]).ToLower() != "pre hoto" && 
     Convert.ToString(row["UPDATED_STATUS"]).ToLower() != "post hoto"))
     {
          ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('Status cannot be blank for SAP ID entered');", true);
          break;
     }
     else { }
}


我有办法做到这一点。。我来了

if (strFlag == "")
                    {
                        dtStatus = GET_STATUS_FROM_SAPID_FOR_HOTO(dtExcelRows.Rows[i]["Current SAPID"].ToString());

                        if (dtStatus == null && dtStatus.Rows.Count < 0)
                        {
                            ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('Status cannot be blank for SAP ID entered');", true);
                        }
                        else
                        {
                            dtExcelRows.Rows[i]["UPDATED_STATUS"] = dtStatus.Rows[0][1].ToString();
                            dtExcelRows.AcceptChanges();
                        }
                    }
                }

                DataTable dtGetHotoPre = null;
                var rows = dtExcelRows.AsEnumerable().Where(x => x.Field<string>("UPDATED_STATUS") == "PRE HOTO");

                if (rows.Any())
                {
                    dtGetHotoPre = rows.CopyToDataTable();
                }

                DataTable dtGetHotoPost = null;
                var rowsPost = dtExcelRows.AsEnumerable().Where(x => x.Field<string>("UPDATED_STATUS") == "POST HOTO");

                if (rowsPost.Any())
                {
                    dtGetHotoPost = rowsPost.CopyToDataTable();
                }
                string strFlagStatus = "";
                if (dtGetHotoPre != null)
                {
                    if (dtGetHotoPost != null)
                    {
                        strFlagStatus = "No Process";
                    }
                    else
                    {
                        strFlagStatus = "Process";
                        grdDvHoto.DataSource = dtGetHotoPost;
                    }
                }
                else
                {
                    if (dtGetHotoPost != null)
                    {
                        strFlagStatus = "Process";
                        grdDvHoto.DataSource = dtGetHotoPre;
                    }
                    else
                    {
                        strFlagStatus = "No Process";
                    }
                }

               // if(dtGetHotoPre != null && dtGetHotoPost != null)

                if (strFlagStatus == "No Process")
                {
                    ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('The sites contains both Pre and Post Hoto Status, so it cannot be uploaded');", true);
                }
                else 
                {
                    // will move ahead.                        
                    grdDvHoto.DataBind();
                }
如果dtStatus==null&&dtStatus.Rows.Count<0,则当前检查错误:

当dtStatus为null时,您将继续检查dtStatus.Rows,这会引发一个nullref异常,您刚刚发现它为null; 行。计数从不小于零。 如果dtStatus==null | | dtStatus.Rows.Count==0,请尝试检查是否完全没有状态—它是null还是没有状态行—Count为零。当发现dtStatus为null时,| |将阻止检查dtStatus.Rows

&&这意味着双方必须同时成立。 ||这意味着至少有一方必须是真的,两方都是真的也可以。
当第一个测试已经确定结果为false时,这两个测试都不评估第二个测试&whatever is always false,true | | whatever is always true

我使用DataRows循环检查条件它不起作用。即使状态为samechange dtStatus==null | | dtStatus.Rows.Count==0到dtStatus==null&&dtStatus.Rows.Count<0您正在谈论的代码,也始终使用else。。我的答案部分还是我的问题?在问题中,但现在我看到它是在你的答案中哦,我仍然不知道是什么错了。。你能更新我的答案代码并给出一个新的答案吗。这样我就可以调试和验证。如果您需要我提供的任何信息,请告诉我,只要替换我标记为您当前支票的内容,并替换为Try。这是您示例中的第三行代码谢谢Hans,更新了我的代码。对你的向导也投了赞成票
if (strFlag == "")
                    {
                        dtStatus = GET_STATUS_FROM_SAPID_FOR_HOTO(dtExcelRows.Rows[i]["Current SAPID"].ToString());

                        if (dtStatus == null && dtStatus.Rows.Count < 0)
                        {
                            ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('Status cannot be blank for SAP ID entered');", true);
                        }
                        else
                        {
                            dtExcelRows.Rows[i]["UPDATED_STATUS"] = dtStatus.Rows[0][1].ToString();
                            dtExcelRows.AcceptChanges();
                        }
                    }
                }

                DataTable dtGetHotoPre = null;
                var rows = dtExcelRows.AsEnumerable().Where(x => x.Field<string>("UPDATED_STATUS") == "PRE HOTO");

                if (rows.Any())
                {
                    dtGetHotoPre = rows.CopyToDataTable();
                }

                DataTable dtGetHotoPost = null;
                var rowsPost = dtExcelRows.AsEnumerable().Where(x => x.Field<string>("UPDATED_STATUS") == "POST HOTO");

                if (rowsPost.Any())
                {
                    dtGetHotoPost = rowsPost.CopyToDataTable();
                }
                string strFlagStatus = "";
                if (dtGetHotoPre != null)
                {
                    if (dtGetHotoPost != null)
                    {
                        strFlagStatus = "No Process";
                    }
                    else
                    {
                        strFlagStatus = "Process";
                        grdDvHoto.DataSource = dtGetHotoPost;
                    }
                }
                else
                {
                    if (dtGetHotoPost != null)
                    {
                        strFlagStatus = "Process";
                        grdDvHoto.DataSource = dtGetHotoPre;
                    }
                    else
                    {
                        strFlagStatus = "No Process";
                    }
                }

               // if(dtGetHotoPre != null && dtGetHotoPost != null)

                if (strFlagStatus == "No Process")
                {
                    ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('The sites contains both Pre and Post Hoto Status, so it cannot be uploaded');", true);
                }
                else 
                {
                    // will move ahead.                        
                    grdDvHoto.DataBind();
                }