2009-04-08 56 views
0

我想要在GridView中顯示一些縮略圖。我不熟悉所提供的所有定製。基本上我想將圖像存儲在一個GridView中,也許跨越5列寬...然後無論多少行都需要完成剩下的工作。我不想要任何列或行標題,並且真的不想看到實際網格的證據。我也想讓圖像可點擊。ASP.Net顯示GridView中的圖像跨越列和行嗎?使用C#

我將從Asp.net中的Sql數據庫中提取圖像。我不想將網格綁定到sqldatasource,而是將圖像粘貼到網格中,並在頁面後面的代碼中使用某種循環。這是讓我感到困惑的地方。我知道你可以創建一個數據表並添加列和行。但是,似乎行/列不能跨越。你將如何存儲圖像,使其像網格一樣工作。我在下面提供了一些(非常)的sudo代碼,讓你知道我正在嘗試做什麼。

須藤代碼:

colcount = 0; 
rowcount = 0; 
imagecount = 0; 
while(images.length > imagecount){ 
    if(colcount < 5){ 
     grid[rowcount][colcount] = images[imagecount]; 
     colcount++; 
     imagecount++; 
    } 
    else{ 
     rowcount++; 
     colcount = 0; 
    } 
} 

回答

0

你爲什麼不手動生成網格?

在您的代碼隱藏中創建一個方法,使用Response.Write語句輸出必要的HTML。在.aspx頁面中,使用​​來調用您的方法並顯示相應的網格。

+0

如果有一小段代碼告訴我如何做到這一點,這將會非常非常好。例如,如果我的網格是一個名爲`GridView1`的** DataGrid **控件,並且想要顯示位於列1中`〜/ images/image1.png`的圖像。 – jp2code 2012-02-09 15:20:44

1

對於你在這裏描述的一切,你最好的選擇是使用DataList控件。通過使用RepeatColumns屬性,您可以指定想要的列數,您甚至可以通過將RepeatLayout屬性設置爲「Flow」來消除「tableness」的任何含義。

這也可以讓你不用擔心列計數,甚至可以綁定一組圖像進行綁定。

編輯:既然你要求一個例子,它將是這樣簡單。首先創建網格並確保有一個佔位符圖像:

<asp:DataList ID="dlImages" runat="server" 
       RepeatColumns="5" 
       RepeatDirection="Horizontal" 
       RepeatLayout="Flow"> 

    <ItemTemplate> 
     <asp:Image ID="imgPrettyPic" runat="server" /> 
    </ItemTemplate> 

</asp:DataList> 
在你的代碼

那麼後面,你必須做的是一個簡單的數據綁定。我不確定您的圖片是如何存儲的,但爲了爭辯,假設您有一個數據庫查詢,它爲您提供了要顯示的每個圖片的URL。你的頁面加載看起來是這樣的:

if (!Page.IsPostBack()) 
{ 

    dtImageURLs = GetImageUrlsFromDB(); 
    dlImages.DataSource = dtImageURLs; 

    dlImages.DataBind(); 
} 

現在,這是人們在不同的事情。我更喜歡在後面的代碼中執行所有RowBinding類型的方法,而不是內聯,因此我使用了DataList的RowDataBound事件,並相應地綁定了URL屬性。

protected void dlImages_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) 
    { 

     Image TargetImage = default(Image); 
     DataRow DataSourceRow = default(DataRow); 

     DataSourceRow = ((System.Data.DataRowView)e.Item.DataItem).Row; 
     TargetImage = (Image)e.Item.FindControl("imgPrettyPicture"); 

     TargetImage.ImageUrl = DataSourceRow.Item("ImageURL").ToString; 
    } 

...那應該讓你啓動並運行。請注意,您需要將DataSourceRow對象更改爲您要數據綁定的任何類型的項目。我使用的是DataRow,因爲這是我通常遇到的最常見的情況。

+0

可能的例子,我的意思是我不熟悉大多數這些控件的屬性......一種小菜。 – user84786 2009-04-08 22:27:44

+0

非常感謝你!我將盡力讓這一切馬上開始。我也喜歡在後面的代碼中綁定等,這對我來說更有意義。瞭解正在發生的事情也更容易。 – user84786 2009-04-08 23:06:31

1

你可以使用一箇中繼器...這將讓您真正定義了每個「行」或「列」看起來和是否想要特定HTML他們得到反覆水平或垂直

1

,那麼你最終會在整個時間內與GridView發生衝突。改爲使用ListView或Repeater。

<asp:ListView runat="server"> 
    <LayoutTemplate> 
     <table> 
     <asp:PlaceHolder id="itemPlaceHolder" runat="server" /> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
      <tr> 
      <td colspan="5"><asp:Image runat="server" src='<%# Eval("ImageUrl")' %></td> 
      <td><%# Eval("Column1") %></td> 
      </tr> 
    </ItemTemplate> 
</asp:ListView> 

我知道你可以創建一個數據表並添加列和行。但是,似乎行/列不能跨越。

這聽起來像你正在創建一個System.Data.DataTable - 這是一個數據結構 - 而不是佈局控件。如果您想以編程方式創建<table>,則可以使用System.Web.UI.WebControls.Table a System.Web.UI.HtmlControls.HtmlTable。您可以在相關的TableRow或HtmlTableRow上設置colspan和rowspan。

相關問題