2012-03-12 10 views
6

Ho un valore bit (Nero) Voglio visualizzare il suo stato in griglia come se fosse vero, la riga visualizza "Sì", altrimenti la riga visualizza "No" , questo è il mio codice, ma il risultato non è giusto, perchè la mia visualizzazione del codice tutte le righe "Sì" se un valore è vero, voglio visualizzare ogni stato di rigaUscita condizionale nella cella in base ai dati di riga nell'evento RowDataBound di 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

qual è il metodo GetData() di ritorno? – Seany84

risposta

9

Si può sempre utilizzare le righe DataItem per ottenere il sottostante 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

soluzione esatta, funziona grazie Tim – Shehab

+0

Funziona per me ma in un contesto leggermente diverso – wubblyjuggly

2

avete bisogno di scorrere un DataTable dt su ogni RowDatabound?

Se non avete bisogno di questo potreste provare:

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, ma ho provato la tua soluzione e ho ricevuto l'errore "Impossibile lanciare l'oggetto di tipo 'System.Web.UI.WebControls.DataControlFieldCell' per digitare 'System.IConvertible'" – Shehab

+0

Hai dimenticato di aggiungere la proprietà .Text, vedi la versione rivista del mio codice con la proprietà .Text aggiunta. – Seany84

2

non so l'origine dati, ma se è possibile valutare, fare qualcosa di simile:

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

Un d code-code:

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

La risposta di Tim funziona perfettamente, grazie a tutti voi per l'aiuto – Shehab

Problemi correlati