Отображение нескольких строк результатов вместо одной при использовании цикла while - PullRequest
2 голосов
/ 31 января 2012

Вот краткое изложение поведения: пока цикл повторяется до конца набора записей, извлекает значения.Затем значения отображаются в соответствующих местах.

Проблема в том, что я хочу отображать только один набор значений.Использование while отображает столько значений, сколько записей в запрашиваемой таблице.Пример ниже:

Что должно отображаться:

<div>
    <div>Service One is Stopped</div>
    <div>Service Two is Running</div>
    <div>Service Three is Stopped</div>
</div>

Что на самом деле происходит:

<div>
    <div>Service One is </div> 
    <div>Service Two is Running</div>
    <div>Service Three is </div>
    <div>Service One is </div>
    <div>Service Two is </div>
    <div>Service Three is Running</div>
    <div>Service One is Stopped</div>
    <div>Service Two is </div>
    <div>Service Three is </div>
</div>

Ниже приведен код ошибки.Я прошу прощения, если это тривиальный вопрос.Я стряхиваю 2+ года ржавчины, не пишу код, и иногда даже простые вещи заставляют тебя :-).Большое спасибо за помощь !!!

@using System.Configuration;
@using System.Data.SqlClient;
@using System.Data;
@using System.Linq;

@{
  System.Data.SqlClient.SqlConnection cn = null;
  cn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["sqlConn"].ToString());
  cn.Open();
  System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("SELECT DISTINCT * FROM servicehealth", cn);
  var myreader = cmd.ExecuteReader();
}
@{
int rowCount = 0;
}
@while (myreader.Read())
{
        rowCount++;
        string service1status = "";
        string service2status = "";
        string service3status = "";
        string servicename = @myreader["servicename"].ToString();

        switch (servicename.ToLower())
        {
            case "serviceone":
                service1status = @myreader["servicestate"].ToString();
                break;
            case "servicetwo":
                service2status = @myreader["servicestate"].ToString();
                break;
            case "service3":
                service3status = @myreader["servicestate"].ToString();
                break;
        }

<div>
    <div>Service One is @service1status</div>
    <div>Service Two is @service2status</div>
    <div>Service Three is @service3status</div>
</div>
}

РЕДАКТИРОВАТЬ: Вот сокращенный снимок таблицы, о которой идет речь:

ServiceId                   |  ServiceName  |   ServiceState  |  StartTrackTime  |  LastUpdated
1111-11111-111111-11111111  |  ServiceOne   |   Stopped       |  1/30/2012 0:00  |  1/30/2012 17:57
2222-22222-222222-22222222  |  ServiceTwo   |   Running       |  1/30/2012 0:00  |  1/30/2012 17:57
3333-33333-333333-33333333  |  ServiceThree |   Running       |  1/30/2012 0:00  |  1/30/2012 17:57

Ответы [ 2 ]

2 голосов
/ 31 января 2012

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

<div>
@while (myreader.Read())
{
     string servicestatus = servicestatus = @myreader["servicestate"].ToString();
     string servicename = @myreader["servicename"].ToString();
    <div>@servicename is @servicestatus</div>

}
</div>
0 голосов
/ 31 января 2012

Вам необходимо переместить ваши строковые объявления и теги div за пределы цикла while:

@{
int rowCount = 0;
string service1status = "";
string service2status = "";
string service3status = "";

while (myreader.Read())
{
    rowCount++;
    string servicename = @myreader["servicename"].ToString();
    switch (servicename.ToLower())
    {
        case "serviceone":
            service1status = @myreader["servicestate"].ToString();
            break;
        case "servicetwo":
            service2status = @myreader["servicestate"].ToString();
            break;
        case "service3":
            service3status = @myreader["servicestate"].ToString();
            break;
    }
}
}
<div>
    <div>Service One is @service1status</div>
    <div>Service Two is @service2status</div>
    <div>Service Three is @service3status</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...