简体   繁体   English

显示 gridView ASP.NET 中的文件夹中的图像

[英]displaying images from a folder in a gridView ASP.NET

How can I display images in GridView from a folder in my project?如何从我的项目文件夹中显示 GridView 中的图像? Iv'e tried to create an image/imageField dynamically, but it didn't work- I don't know how to connect the images to the imageField in my GridView, and that's my main problem.我试图动态创建一个图像/图像字段,但它不起作用——我不知道如何将图像连接到我的 GridView 中的图像字段,这是我的主要问题。 How can I do it?我该怎么做?

Here's my GridView:这是我的 GridView:

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                Height="271px" onselectedindexchanged="GridView1_SelectedIndexChanged" 
                style="font-family: Arial, Helvetica, sans-serif" Width="452px">
                <Columns>
                    <asp:BoundField DataField="messageSubject" HeaderText="subject" />
                    <asp:BoundField DataField="messageContent" HeaderText="content" />
                    <asp:BoundField DataField="wasReadOrNot" HeaderText="was read" />
                    <asp:ImageField HeaderText="image">
                    </asp:ImageField>
                </Columns>
            </asp:GridView>

(In addition, it's okay to use imageField at all?) (另外,用 imageField 完全没问题?)

And here's my Code Behind:这是我的代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
        if (!IsPostBack)
        {
            WebServiceDBMessages.WebServiceDBMessagesSoapClient dbm = new WebServiceDBMessages.WebServiceDBMessagesSoapClient();
            DataTable dt = dbm.ReturnAllMessagesForTeacher(Session["teacher"].ToString()).Tables[0];
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                if (GridView1.Rows[i].Cells[3].Text == "not read")
                {
                    //here i want to display image whose url is: "/images/notRead.png"
                }
                else
                {
                      //here i want to display image whose url is: "/images/read.png"
                }
            }
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }

Thanks(:谢谢(:

The image url is not in the dataset so can change your GridView definition to图像 url 不在数据集中,因此可以将 GridView 定义更改为

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            Height="271px" onselectedindexchanged="GridView1_SelectedIndexChanged" 
            style="font-family: Arial, Helvetica, sans-serif" Width="452px" OnRowDataBound="GridView1_RowDataBound">
    <Columns>
        <asp:BoundField DataField="messageSubject" HeaderText="subject" />
        <asp:BoundField DataField="messageContent" HeaderText="content" />
        <asp:BoundField DataField="wasReadOrNot" HeaderText="was read" />
        <asp:TemplateField HeaderText="image">
            <ItemTemplate>
                <asp:Image runat="server" ID="img" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Change your page load to将页面加载更改为

protected void Page_Load(object sender, EventArgs e)
{
    Page.MaintainScrollPositionOnPostBack = true;
    if (!IsPostBack)
    {
        WebServiceDBMessages.WebServiceDBMessagesSoapClient dbm = new WebServiceDBMessages.WebServiceDBMessagesSoapClient();
        DataTable dt = dbm.ReturnAllMessagesForTeacher(Session["teacher"].ToString()).Tables[0];

        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
}

Add following添加以下内容

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var image = e.Row.FindControl("img") as Image;
            image.ImageUrl = e.Row.Cells[3].Text == "not read" ? "/images/notRead.png" : "/images/read.png";
        }
    }

This should accomplish what you are trying to do.这应该完成您正在尝试做的事情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM