ASP.NET C# GridView - променлив брой колони и миниатюра на изображението

Използвайки 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“, тогава вместо пътя към мрежовия файл (\somePc\path\file.jpg) той трябва да види миниатюра на това изображение в GridView.


person yosh    schedule 22.09.2011    source източник
comment
@just_name Обясних малко повече на пример..   -  person yosh    schedule 22.09.2011


Отговори (1)


Ако знаете типа на вашия източник на данни и името на колоната, която съдържа 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);
        }
    }
}
person jdavies    schedule 22.09.2011