C# 从datatable中筛选asp.net中某列的数据
我有一个数据表,它可以获取一些记录。因此,有一个列名为UPDATED_STATUS。在该列中,将显示“拍摄前”或“拍摄后”值 所以我想要的是,这些值中的任何一个都应该在该列中,然后只有它应该向前移动,否则它应该在 拍摄前或拍摄后都可以是他们的选择 下面是供参考的示例图像 下面是获取带有更新的_STATUS列的数据表的代码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
你在找这样的人吗
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();
}