2012-03-12 2 views
6

비트 값 (검정)이 true 인 것처럼 Gridview에서 해당 상태를 표시하려는 경우 행이 "예"로 표시되고, 그렇지 않으면 행이 "아니오" 하나의 값에 해당하는 경우 모든 행이 "예"내가Gridview의 RowDataBound 이벤트에서 행 데이터를 기반으로 셀의 조건부 출력

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

GetData()가 반환하는 것은 무엇입니까? – Seany84

답변

9

당신은 항상 얻을 수있는 행을 DataItem을 사용할 수 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

정확한 해결책, 그것은 당신에게 감사하고 있습니다 Tim – Shehab

+0

나를 위해 일하지만 약간 다른 컨텍스트 – wubblyjuggly

2

당신이 DataTable을 반복해야합니까 각 행의 상태를 표시하려면이 내 코드,하지만 결과는 내 코드 표시 사촌, 옳지 않아 각 RowDatabound에 dt? 당신이 필요하지 않은 경우

당신이 시도 할 수 :

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,하지만 당신의 솔루션을 시도하고 " 'System.Web.UI.WebControls.DataControlFieldCell'형식의 개체를 'System.IConvertible'형식으로 캐스팅 할 수 없습니다" – Shehab

+0

.Text 속성을 추가하는 것을 잊어 버렸습니다. .Text 속성을 추가 한 수정 된 버전의 코드 – Seany84

2

하지만, 평가할 수 있다면 다음과 같이하십시오 :

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

d 코드 숨김 :

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

Tim의 답변은 완벽하게 작동합니다. – Shehab

관련 문제