2014-12-24 2 views
-3

iam이하는 일은 데이터베이스에 사진을 삽입하고 페이지 앞쪽으로 업로드하는 것입니다. 앞 페이지에는 이름과 사진이 나와야합니다.GridView에서 다른 페이지로 리디렉션되는 행을 클릭하면 데이터가 전송됩니다.

public partial class ListOfItems : System.Web.UI.Page{ 
    public string ItemImageName, fileName; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["Username"] == null) 
     { 
      //Response.Redirect("Login.aspx?Data=" + "AddItem"); 
      //Response.Redirect("Login.aspx"); 

      Response.Cookies.Add(new HttpCookie("returnUrl", Request.Url.PathAndQuery)); 
      Response.Redirect("Login.aspx"); 

     } 
     string[] filePaths = Directory.GetFiles(Server.MapPath("~/UploadedItems/")); 
     List<ListItem> files = new List<ListItem>(); 
     foreach (string filePath in filePaths) 
     { 
      fileName = Path.GetFileName(filePath); 

      DataSet ds = InsertClass.GetItemName(fileName); 
      foreach (DataRow row in ds.Tables[0].Rows) 
      { 
       ItemImageName = row["ItemName"].ToString(); 
       files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName)); 
       //files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName)); 
      } 
      GridView1.DataSource = files; 
      GridView1.DataBind(); 
     } 
    } 

    protected void gvSearch_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.Attributes.Add("style", "cursor:pointer;"); 
      e.Row.Attributes.Add("onclick", "location='ItemPage.aspx?id=" +ItemImageName+ e.Row.Cells[0].Text + "'"); 

     } 
    } 
} 

: 데이터베이스에서 이름 난 내 UploadedItems 폴더에있는 모든 사진을 얻기 스피 여기

가의 GridView 여기

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="False" Width="325px" OnRowDataBound="gvSearch_RowDataBound"> 
     <Columns> 
      <asp:TemplateField> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Text") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Text") %>'></asp:Label> 


       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:ImageField DataImageUrlField="Value" ControlStyle-Height="100" ControlStyle-Width="100" > 
    <ControlStyle Height="100px" Width="100px"></ControlStyle> 
      </asp:ImageField> 

     </Columns> 
    </asp:GridView> 

을 가지고 내 첫 페이지 것은 내 코드입니다 이 클래스에서 계속 진행되는 작업에 대해 설명하겠습니다. UploadedItems로 이동하여 해당 사진의 이름을 사용하여 연결된 ItemName과 데이터베이스를 쿼리합니다. 이제 내 문제는 그 사진을 누르면 내가 그리드 뷰에있는 ItemName과 페이지로 이동해야한다는 것입니다. 그러나 그 작업은 GridView에 추가 된 마지막 그림의 이름을 보내고 있습니다.

답변

1
foreach (DataRow row in ds.Tables[0].Rows) { 
    ItemImageName = row["ItemName"].ToString(); 
    files.Add(new ListItem(ItemImageName,"~/UploadedItems/" + fileName)); 
    //files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName)); 
} 

이 문제에 대한 해결책은 다음과 같습니다. -

datarow를 사용하여 데이터 집합을 반복 할 때마다 ItemImageName은 최신 값을 얻습니다. 최종 루프에서 마지막으로 저장된 imagename을 데이터 집합에서 가져오고 있으며 동일한 바인딩을하는 전역 변수입니다. gridview rowdatabound 이벤트의 다른 이미지에 대한 이름입니다.

관련 문제