2012-05-10 6 views
0

У меня есть проблемы, чтобы получить данные о конкретной ячейке в моей GridView я делаю это так:Не удается получить данные из моего GridView

double total = 0; 

for (int i = 0; i < GridFactures.Rows.Count; i++) 
    total += Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString()); 

lblTotalTTC.Text = "Montant total TTC : " + total; 

колонна в вопросе объявлена ​​в моем файле ASPX:

<asp:TemplateField HeaderText="Montant TTC"> 
    <ItemTemplate> 
     <asp:Label ID="lblMontantTTC" runat="server" Text='<%#Eval("MontantTTC") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

Я уверен, что это всегда шестой столбец, который я хочу проверить. я положил перерыв и GridFactures.Rows[i].Cells[6].Text.ToString() всегда содержит «» ничего больше ... спасибо за вашу помощь

ответ

0

Если я не ошибочно (и ваша метка является первым/регулирование только в клетке) -

Вы должны задать для управления индексом 0, или найти его по идентификатору, а затем попросить .text

Как так:

GridFactures.Rows[i].Cells[6].Controls[0].Text.ToString() 
+0

К сожалению, это не работает. На самом деле я не могу получить данные из gridview. – Slrg

+1

В целях тестирования попробуйте использовать метод GridFactures.Rows [i] .FindControl ("lblMontantTTC") и посмотрите, можете ли вы найти его таким образом. –

+0

еще раз спасибо, но он тоже не работает ... я не понимаю – Slrg

0

запомнить это не является нулевым индексом, поэтому [6] означает клетку 7

+0

Да я знаю! Я начал отсчет с 0. Но спасибо! – Slrg

+0

Хехе ошибка, которая слишком часто была просто обязана быть обязательно;) – RhysW

0

Я знаю почему. Я сам столкнулся с той же ситуацией. Вам нужно проверить поля, которые пусты, если это так, сначала конвертируйте их в ноль.

total += (GridFactures.Rows[i].Cells[6].Text == "")? 0d : Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString()); 
1

Как насчет использования LINQ вместо циклирования?

double mySum = 
     GridFactures.Rows 
        .Cast<GridViewRows>() 
        .Sum(row => 
       Double.Parse(((Label)row.FindControl("lblMontantTTC")).Text)); 

Если вы не видите никаких значений, то ваша решетка на самом деле не было привязки данных еще, или ViewState отключен на сетке. Все это зависит от того, где/когда вы выполняете этот расчет в жизненном цикле страницы.

2

Вместо этого кода:

for (int i = 0; i < GridFactures.Rows.Count; i++) 
    total += Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString()); 

Попробуйте это:

for (int i = 0; i < GridFactures.Rows.Count; i++) 
{ 
    Control ctrl = GridFactures.Rows[i].Cells[6].FindControl("lblMontantTTC"); 
    if (ctrl != null) 
    { 
     Label lbl = ctrl as Label; 
     if (lbl != null) 
     { 
      total += Convert.ToDouble(lbl.Text); 
     } 
    } 
} 
Смежные вопросы