2012-03-12 15 views
6

Mam wartość bitową (czarny) Chcę wyświetlić jej status w gridview, tak jakby była ona prawdziwa, wiersz wyświetlał "Tak", w przeciwnym razie wiersz wyświetlał "Nie" , to jest mój kod, ale wynik nie jest w porządku, bo moim wyświetlaczu kodu wszystkie wiersze „Tak”, jeśli jedna wartość jest prawdziwa, chcę, aby wyświetlić status każdego wierszaWarunkowe dane wyjściowe w komórce w oparciu o dane wiersza w zdarzeniu RowDataBound Gridview

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataTable dt = GetData(); 
      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       Boolean bitBlack = Convert.ToBoolean(dt.Rows[i]["Black"]); 
       if (bitBlack) 
       { 
        e.Row.Cells[7].Text = ("Yes"); 
       } 
       else 
       { 
        e.Row.Cells[7].Text = ("No"); 
       } 
      } 
     } 
    } 
+0

jaka jest metoda zwracania GetData()? – Seany84

Odpowiedz

9

Można zawsze użyć wierszy DataItem dostać bazowego DataSource:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     bool isBlack = row.Field<bool>("Black"); 
     e.Row.Cells[7].Text = isBlack ? "Yes" : "No"; 
    } 
} 
+1

dokładne rozwiązanie, działa dziękuję Tim – Shehab

+0

Działa dla mnie, ale w nieco innym kontekście – wubblyjuggly

2

czy trzeba iterację DataTable dt w każdym RowDatabound?

Jeśli nie potrzebujesz tego można spróbować:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 

       Boolean bitBlack = Convert.ToBoolean(e.Row.Cells[7].Text); 
       if (bitBlack) 
       { 
        e.Row.Cells[7].Text = "Yes"; 
       } 
       else 
       { 
        e.Row.Cells[7].Text = "No"; 
       } 

     } 
    } 
+0

Thanx Seany, ale wypróbowałem Twoje rozwiązanie i otrzymałem komunikat "Nie można odlać obiektu typu" System.Web.UI.WebControls.DataControlFieldCell ", aby wpisać" System.IConvertible "" – Shehab

+0

Nie pamiętam, aby dodać właściwość .Text, zobacz zmieniona wersja mojego kodu z dodaną właściwością .Text. – Seany84

2

nie wiem swoje źródło danych, ale jeśli możesz to ocenić, zrób coś takiego:

<asp:TemplateField HeaderText="Status"> 
      <ItemStyle CssClass="list" /> 
      <ItemTemplate> 
        <%# GetBit(Eval("BlackBit"))%> 
      </ItemTemplate> 
</asp:TemplateField> 

An d kod-za:

private string GetBit(object objBit) 
{ 
    if (Convert.ToInt32(objBit) == 1) 
    { 
     return "Yes"; 
    } 
    return "No"; 
} 
+0

Odpowiedź Tima działa doskonale, dzięki wam wszystkim za pomoc – Shehab

Powiązane problemy