Q:

Formato condicional OnRowDataBound en Gridview

Tengo un gridview en ASP .NET que muestra los datos de una consulta SQL. Tengo una columna llamada 'Debe' y si la columna esta vacia necesito que me muestre un icono span class='glyphicon glyphicon-ok-sign y si la columna no esta vacia debe mostrar este icono span class='glyphicon glyphicon-alert';

<asp:GridView ID="GridView1" OnPageIndexChanging="grdView_PageIndexChanging" runat="server" ShowHeaderFilterButton="true" AutoGenerateColumns="False"   Allowpaging="True" OnRowDataBound="RowDataBound"  AllowSorting="True" OnSorting="OnSorting" ShowFooter="True" PageSize="15" >     

<asp:BoundField DataField="Nombre" HeaderText="Nombre" ReadOnly="True" SortExpression="Nombre" />
.
.
.
<asp:BoundField DataField="Debe" HeaderText="Debe" ReadOnly="True" SortExpression="Debe" Visible="False" />
           

Intente esto pero no funciona

<asp:BoundField DataField="Debe" HeaderText="Debe" ReadOnly="True" SortExpression="Debe" Visible="False" />

<asp:TemplateField HeaderText="Debe"> 
<ItemTemplate>
<asp:Literal  ID="IDDebe" runat="server" Text='<%# Eval("Debe") %>'> </asp:Literal>
</ItemTemplate> 
</asp:TemplateField>

//FORMATO CONDICIONAL
protected void RowDataBound(Object sender, GridViewRowEventArgs e)
{
string debe = e.Row.Cells[14].Text.ToString();
if (debe == "")
{
debe = "<span class='glyphicon glyphicon-ok-sign'></span>";
            
}
else
{
debe = "<span class='glyphicon glyphicon-alert'></span>";
}
}

A:

Si analizas el articulo
[GridView] - Ocultar dinámicamente botones, imágenes y link de la fila 
veras que en el evento RowDataBound puede definir esta logica, pero dbees poder seleciconar correctamente el control.
Debes definir ambos iconos en el template del gridview y ocultas uno u otro segun aplique
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow)
        return;

    DataRow row = ((DataRowView)e.Row.DataItem).Row;
    string debe = row.Field<string>("Debe");

    string ctrlHide = "";
    if (debe == ""){
       ctrlHide = "signIcon";
    }
    else{
       ctrlHide = "alertIcon";
    }

    var img = e.Row.FindControl(ctrlHide) as HtmlGenericControl;
    e.Row.Cells[14].Controls.Remove(img);
}

En el html defines
<asp:TemplateField HeaderText="Debe"> 
  <ItemTemplate>
     <span id="signIcon" class='glyphicon glyphicon-ok-sign' runat="server"></span>
     <span id="alertIcon" class='glyphicon glyphicon-alert' runat="server"></span>
  </ItemTemplate> 
</asp:TemplateField>

En este ejemplo imagine de DataSource usas un DataTable por eso para obtener los datos use:
DataRow row = ((DataRowView)e.Row.DataItem).Row;

asi puedes acceder al dato de la columna debe sin tener que ponerla como columna del grid

