2013-12-17 1 views
1

나는 이것을 하루 종일 파악하려고 노력해 왔습니다. 3 열의 SQL 데이터로 GridView를로드 한 다음 동적으로 이미지를 4 열에 추가하려고합니다. SQL에서 데이터를 잘로드 할 수 있지만 내가 무엇을 상관없이로드 할 이미지를 가져올 수 없습니다. 여기 내 코드는 다음과 같습니다.이미지를 Gridview에로드

SqlCommand cmd1 = new SqlCommand("StoredProc", myConnection1); 
cmd1.CommandType = CommandType.StoredProcedure; 
SqlDataReader reader = cmd1.ExecuteReader(); 
while (reader.Read()) 
{ 
    if (reader["ServiceStatus"].ToString().ToLower() == "stopped") 
    { 
      ImageField status = new ImageField(); 
      status.HeaderText = "Status"; 
      status.Visible = true; 
      GridView1.Columns.Add(status); 
      status.DataAlternateTextFormatString = @"~/Images/Image.gif"; 
    } 

    GridView1.DataSource = reader; 
    GridView1.DataBind(); 
} 

데이터 테이블을 만들고 데이터를 채우려 고 시도했지만 여전히 작동하지 않습니다. 나는 이것을 할 수있는 쉬운 방법이 있어야한다는 것을 알고있다. 내가 뭘 놓치고 있니?

편집 :

내가 지금 TemplateField를 사용하고 내가 표시 할 기본 이미지를 얻고있다 :

<asp:TemplateField HeaderText="Status"> 
    <ItemTemplate> 
      <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/greydot.jpg"/> 
    </ItemTemplate> 
</asp:TemplateField> 

그래서 난 뒤에 있음을 변경하기 위해 내 코드에서이 이미지 URL을 참조하는 방법 영상? 이미지는 SQL이 아닌 솔루션에 저장됩니다.

+0

제목을 수정했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+2

또한 [DataImageUrlField] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.imagefield.dataimageurlfield%28v=vs.110%29.aspx)도 설정해야합니다. 모든 이미지를 표시하고 ** DataAlternateTextFormatString ** ([MSDN 사용 예] (http://msdn.microsoft.com/en-us/library/system.web.ui)에서 서식 문자열을 설정하십시오. % 28v = vs.110 % 29.aspx)). – pasty

답변

1

경로를 데이터베이스에 저장하거나 해당 이미지의 경로를 동적으로 지정할 수 있습니다. 이처럼 :

ImageUrl='<%#Eval("ProductImage") 
+0

나는 이것에 대해 생각해 왔지만 이것은 상태를 기반으로 이미지를 표시하는 동적 인 gridview 여야합니다. 나는 단지 3 개의 이미지에 대해 전체 테이블을 가지고있는 것을 싫어한다. 내가 선택의 여지가 없다면 나는 그 길로 갈 것이지만 다른 길이 있어야한다. – Matt

0
protected void gvUserProfile_DataBound(object sender, EventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // set reference to current data record 
     // use IDataRecord if you bind to a DataReader, and DataRowView if you bind to a DataSet 
     DataRowView dataRow = (DataRowView) e.Row.DataItem; 
     string myflag = dataRow [ "yourColumnNameHere" ].ToString (); 
     if (myflag == "0") 
     { 
      // do something amusing here 
     } 
    } 
} 

2 - 당신이 (예하여 ImageButton 등) RowDataBound에 새로운 컨트롤을 인스턴스화하는 경우, 당신은 셀의 Controls 컬렉션에 인스턴스화 된 컨트롤을 추가해야합니다. 예 :

e.Row.Cells [ 0 ].Controls.Clear (); 
ImageButton img = new ImageButton (); 
img.ImageUrl = "~/images/editGray.gif"; 
e.Row.Cells [ 0 ].Controls.Add (img); 
관련 문제