2016-08-23 5 views
0

У меня проблема с определением длины в цикле for. Я подсчитываю строки в таблице из базы данных SQL и хочу, чтобы это число было длиной цикла for.Переменная как длина для петли?

Это код для цикла:

protected void Page_Load(object sender, EventArgs e) 
    { 

     for (int i = 0; i < A; i++) 
     { 
      System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
      new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
      createDiv.ID = "createDiv"; 
      this.Controls.Add(createDiv); 
     } 

    } 

И это код, который подсчитывает строки в моей таблице базы данных.

public void A() 
    { 
     string stmt = "SELECT COUNT(*) FROM AlgSchipInfo"; 
     int count = 0; 

     using (SqlConnection thisConnection = new SqlConnection ("DataSource=VMB-LP12;Initial Catalog=SmmsData;Integrated Security=True")) 
     { 
      using (SqlCommand cmdCount = new SqlCommand(stmt, thisConnection)) 
      { 
       thisConnection.Open(); 
       count = (int)cmdCount.ExecuteScalar(); 
       TextBox2.Text = count.ToString(); 
      } 
     } 
    } 

Я хочу использовать это, чтобы показывать информацию обо всех судах, находящихся в моей базе данных, создавая divs в моем цикле for.

Может ли кто-нибудь помочь мне с тем, как мне определить длину?

Спасибо!

+3

Изменить 'Ā' чтобы возвращать' int', иметь его вернуть 'count' и изменить свой цикл для' я

+1

Поскольку вы хотите отображать информацию для каждой записи. Тогда почему бы вам просто не получить информацию и сделать foreach? –

+0

, если вы собираетесь заполнить цикл данными из запроса, тогда подсчет до того, как запрос будет пустой тратой времени и может быть неправильным (скажем, строка вставлена ​​между подсчетом и выбором), просто подсчитайте количество возвращенных строк из запрос данных, – MikeT

ответ

5

Не вызывайте свой метод A внутри условия цикла for - он будет выполняться на каждой итерации.

int count = A(); 
for (int i = 0; i < count; i++) 
{ 
    System.Web.UI.HtmlControls.HtmlGenericControl createDiv = ... 
} 

public int A() 
{ 
    ... 
    using (... 
    using (... 
    { 
     ... 
     return count; 
    } 
} 
+0

хороший совет, но вы замаскируете, что вы изменили тип возврата 'A()', который является фактическим изменением, которое вы сделали, чтобы исправить его проблему. – MikeT

2

В этом случае, просто сделать A() возвращение int вместо void:

public int A() { 
    int count = 0; 
    //do db stuff 
    return count; 
} 

Затем в цикле:

int shipCount = A(); 

for (int i = 0; i < shipCount; i++) { 
    //make div 
} 
+0

«очиститель»? это будет катастрофой, если он этого не сделает. – Igor

+0

@Igor Я видел ваше редактирование - я этого не знал! Я удалю этот бит – levelonehuman

+0

@Igor Disaster немного поместил его, сильно неэффективен, хотя я мог согласиться с – MikeT

1

Слишком много вещей, чтобы сказать ^^ Первый, если вам нужно отобразить информацию о элементе в вашей таблице AlgSchipInfo, просто выберите эти данные после того, как вы будете иметь счет в datatable или что-то вроде ORM.

Когда вы получаете данные из базы данных, привязывайте их к репитеру или другому собеседнику, чтобы перечислить ваши элементы. Это будет более эффективно, чем с нуля IMAO.

Если у вас есть более конкретный вопрос, вы радушны;)