ASP.. NET c# GridView -可变列数和图像缩略图

本文关键字:图像 略图 NET GridView ASP | 更新日期: 2023-09-27 18:09:27

使用GridView1.DataBind();AutoGenerateColumns="true",我如何找到特定的列,而不是URL显示从该URL的图像缩略图?

GridView是一个SQL查询的结果,它可能返回2到10列(其中一个可能是图像URL)。

对于缩略图,我相信可以使用image.GetThumbnailImage(),但是在这种情况下在哪里使用它?


生成SQL查询:

if (CheckBoxUser.Checked) search_fields += "UserName";
if (CheckBoxDate.Checked) search_fields += ",EventDate";
...
if  (CheckBoxImageUrl.Checked) search_fields += ",ImageUrl";
SqlConnection conn = new SqlConnection(connectionString);
string select = "SELECT " + search_fields + " FROM TableName";
SqlDataAdapter DataCommand = new SqlDataAdapter(select, conn);
DataCommand.Fill(ds);     
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();

GridView1就是:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True">
    <HeaderStyle CssClass="header_grid" />               
</asp:GridView>

没有手动声明列,因为我们不知道用户想要浏览多少列。但是如果他标记了"ImageUrl"列,那么他需要在GridView中看到这个图像的缩略图,而不是网络文件路径('somePc'path'file.jpg)。

ASP.. NET c# GridView -可变列数和图像缩略图

如果您知道数据源的类型和包含图像url的列的名称,您可以像这样使用RowDataBound事件:

注意:这只会在你没有使用其他模板列的情况下工作。

gridView1.RowDataBound += new GridViewRowEventHandler(gridView1_RowDataBound);
...
void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataView dataSource = (DataView)gridView1.DataSource;
        DataColumn imageUrlColumn = dataSource.Table.Columns["ImageUrl"];
        if (imageUrlColumn != null)
        {
            int index = imageUrlColumn.Ordinal;
            DataControlFieldCell cell = (DataControlFieldCell)e.Row.Controls[index];
            string imageUrl = cell.Text;
            cell.Text = GenerateThumbnailUrl(imageUrl);
        }
    }
}