Фильтрация данных из таблицы данных для одного из столбцов в asp.net - PullRequest
0 голосов
/ 27 июня 2019

У меня есть datatable, который выбирает некоторые записи.Таким образом, есть одно имя столбца как UPDATED_STATUS .В этом столбце придет значение Pre Hoto или Post Hoto.

Итак, я хочу, чтобы любое из этих значений было их в этом столбце, тогда только оно должно двигаться вперед, в противном случае должно появиться сообщениеоповещение как

Либо Pre Hoto или Post Hoto могут быть их

Ниже приведен пример изображения для справки

IMG

Ниже приведен код для получения 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();
                        }
                    }

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Ваш текущий чек (if (dtStatus == null && dtStatus.Rows.Count < 0)) неверен:

  1. когда dtStatus имеет значение null, вы продолжаете проверять dtStatus.Rows, который выдает исключение nullref (вы только что узнали, что это было null);
  2. Rows.Count никогда не бывает меньше нуля.

Попробуйте if (dtStatus == null || dtStatus.Rows.Count == 0), чтобы проверить, нет ли статуса вообще (это null) или нет строк статуса (количество равно нулю). || предотвратит проверку на dtStatus.Rows, когда было обнаружено, что dtStatus имеет значение null.

&& означает, что обе стороны должны быть true одновременно.
|| означает, что хотя бы одна из сторон должна быть истинной (обе истины - тоже хорошо).
Оба не оценивают второй тест, когда первый уже определил результат (false &&, что всегда ложно, true ||, что всегда верно)

0 голосов
/ 27 июня 2019

У меня есть способ сделать это .. Вот и я

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();
                }
0 голосов
/ 27 июня 2019

Вы ищете как это!

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 { }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...