ASP.Net在GridView中跨列和跨行显示图像?使用C#

ASP.Net在GridView中跨列和跨行显示图像?使用C#,c#,asp.net,sql,gridview,image,C#,Asp.net,Sql,Gridview,Image,我想在Gridview中显示一些缩略图。我不熟悉提供的所有定制。基本上,我想将图像存储在Gridview中,可能跨越5列宽…然后是完成其余部分所需的行数。我不想要任何列或行标题,也不想看到实际网格的证据。我还想使图像可点击 我将从Asp.net中的Sql数据库中提取图像。我不想将网格绑定到sqldatasource,而是在页面后面的代码中使用某种循环将图像粘贴到网格中。这就是我感到困惑的地方。我知道您可以创建datatable并添加列和行。但是,行/列似乎不跨。如何存储图像,使其像网格一样工作。

我想在Gridview中显示一些缩略图。我不熟悉提供的所有定制。基本上,我想将图像存储在Gridview中,可能跨越5列宽…然后是完成其余部分所需的行数。我不想要任何列或行标题,也不想看到实际网格的证据。我还想使图像可点击

我将从Asp.net中的Sql数据库中提取图像。我不想将网格绑定到sqldatasource,而是在页面后面的代码中使用某种循环将图像粘贴到网格中。这就是我感到困惑的地方。我知道您可以创建datatable并添加列和行。但是,行/列似乎不跨。如何存储图像,使其像网格一样工作。我在下面提供了一些(非常)sudo代码,让您了解我正在尝试做什么

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; 
    }
}  
colcount=0;
行数=0;
imagecount=0;
而(images.length>imagecount){
如果(colcount<5){
网格[rowcount][colcount]=图像[imagecount];
colcount++;
imagecount++;
}  
否则{
行计数++;
colcount=0;
}
}  

为什么不手动生成网格


在codebehind中创建一个方法,使用
Response.Write
语句输出必要的HTML。在
.aspx
页面中,使用
调用您的方法并显示相应的网格。

为什么不手动生成网格


在codebehind中创建一个方法,使用
Response.Write
语句输出必要的HTML。在
.aspx
页面中,使用
调用您的方法并显示相应的网格。

对于此处描述的所有内容,您最好使用DataList控件。您可以通过使用RepeatColumns属性来指定要有多少列宽,甚至可以通过将RepeatLayout属性设置为“Flow”来消除任何“表格性”的感觉

这还可以让您不必担心列计数,甚至可以绑定一组图像进行绑定

编辑:既然你要求一个例子,那么就这么简单。首先创建网格,并确保图像具有占位符:

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

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

</asp:DataList>
这就是人们在事情上的不同之处。我更喜欢在代码隐藏中执行所有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,因为这是我通常遇到的最常见的场景。

对于您在这里描述的所有内容,您最好使用DataList控件。您可以通过使用RepeatColumns属性来指定要有多少列宽,甚至可以通过将RepeatLayout属性设置为“Flow”来消除任何“表格性”的感觉

这还可以让您不必担心列计数,甚至可以绑定一组图像进行绑定

编辑:既然你要求一个例子,那么就这么简单。首先创建网格,并确保图像具有占位符:

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

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

</asp:DataList>
这就是人们在事情上的不同之处。我更喜欢在代码隐藏中执行所有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对象更改为数据绑定的任何类型的项。我使用的是数据行,因为这是我通常遇到的最常见的场景。

您可以使用中继器。。。这将允许您真正定义每个“行”或“列”的外观,以及它们是水平重复还是垂直重复

您可以使用中继器。。。这将允许您真正定义每个“行”或“列”的外观,以及它们是水平还是垂直重复。如果您想要特定的HTML,那么您将在整个时间内与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>

-是数据结构-不是布局控件。如果您想以编程方式创建
,可以使用以下两种方法之一。您可以在关联的TableRow或HtmlTableRow上设置colspan和rowspan。

如果您想要特定的HTML,那么您将在整个时间内与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>

-是数据结构-不是布局控件。如果您想以编程方式创建
,可以使用以下两种方法之一。您可以在关联的TableRow或HtmlTableRow上设置colspan和rowspan。

可能的示例,我的意思是我不熟悉这些控件的大多数属性……有点像noob。非常感谢!我要试着马上把这件事办好。我也喜欢在代码背后进行绑定……这对我来说更有意义。这也更容易理解正在发生的事情。可能的例子,我的意思是我不熟悉这些控件的大多数属性…有点呆板。非常感谢!我要试着马上把这件事办好。我也喜欢在代码背后进行绑定……这对我来说更有意义。也更容易理解正在发生的事情?我不熟悉复读机。我理解你的意思,但不知道如何实现它?你是如何存储图像的?二进制还是仅在这些位置?例如?我不熟悉复读机。我理解你的意思,但不知道如何实现它?你是如何存储图像的?二进制或j