У меня есть datatable, который извлекает несколько записей. Итак, есть одно имя столбца ОБНОВЛЕНО_СТАТУС. В этом столбце появится значение Pre Hoto или Post Hoto.
Итак, что я хочу, так это то, что любое из этих значений должно быть их в этом столбце, тогда только оно должно двигаться вперед, иначе оно должно вызывать предупреждение как
Либо Pre Hoto, либо Post Hoto могут быть их
Ниже приведен образец изображения для справки
Ниже приведен код для получения datatable с помощью столбца UPDATED_STATUS.
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();
}
}





Вы ищете, как это!
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 { }
}
Я использую цикл DataRows для проверки условия
это не работает. всегда входит в 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();
}
Ваш текущий чек (if (dtStatus == null && dtStatus.Rows.Count < 0)) неверен:
Попробуйте if (dtStatus == null || dtStatus.Rows.Count == 0) проверить, нет ли статуса вообще (это null) или нет строк статуса (количество равно нулю). || предотвратит проверку dtStatus.Rows, когда будет обнаружено, что dtStatus имеет значение null.
&& означает, что обе стороны должны быть true одновременно.|| означает, что по крайней мере одна из сторон должна быть верной (обе верны тоже).
Оба не оценивают второй тест, когда первый уже определил результат (false && всегда ложно, true || всегда верно)
о каком коде вы говорите .. моя часть ответа или мой вопрос?
В вопросе, но теперь я вижу, что это и в вашем ответе
о, я все еще не понимаю, что не так .. можете ли вы обновить мой код ответа и опубликовать новый ответ. так что я могу отладить и проверить. Дайте мне знать, если вам что-нибудь понадобится от меня
Просто замените то, что я пометил как «ваш текущий чек», и замените на «Попробовать». Это третья строка кода в ваших примерах.
Спасибо, Ганс, обновил мой код. тоже проголосовал за ваше руководство
изменить (dtStatus == null || dtStatus.Rows.Count == 0 на (dtStatus == null && dtStatus.Rows.Count < 0