【问题标题】:Image Binding in gridview asp.net with find control property带有查找控件属性的gridview asp.net中的图像绑定
【发布时间】:2018-04-05 22:53:57
【问题描述】:

我正在尝试从按钮单击事件设置图像源 URL,但出现错误“EventArgs 不包含行图像网格视图的定义”

网格视图代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" Height="222px" Width="859px"  style="text-align:center;">
                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                        <Columns>
                            <asp:BoundField HeaderText="Artist" Datafield="Artist"/>
                            <asp:BoundField HeaderText="Album" Datafield="Album"/>
                            <asp:BoundField HeaderText="Playcount" Datafield="Playcount"/>

                            <asp:TemplateField HeaderText="Album Art">
                                <ItemTemplate>
                                    <asp:Image ID="Image1" runat="server" width="174px" height="174px"/>
                                </ItemTemplate>
                            </asp:TemplateField>

                        </Columns>
                        <EditRowStyle BackColor="#999999" />
                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                        <SortedAscendingCellStyle BackColor="#E9E7E2" />
                        <SortedAscendingHeaderStyle BackColor="#506C8C" />
                        <SortedDescendingCellStyle BackColor="#FFFDF8" />
                        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>

从 json 绑定:

protected void btnMusic_Submit_Click(object sender, EventArgs e)
    {

        if (txtMusic.Text != null && txtMusic.Text != "")
        {
            string artist = txtMusic.Text;
            var requestUrl = "http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&artist=" + artist + "&api_key=[]&format=json";
            var client = new WebClient();
            client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome / 58.0.3029.110 Safari / 537.36");
            var response = client.DownloadString(requestUrl);
            response = response.Replace(@"#text", "text");
            dynamic stuff = JObject.Parse(response);
            DataTable dt = new DataTable();
            dt.Columns.Add("Artist", typeof(string));
            dt.Columns.Add("Album", typeof(string));
            dt.Columns.Add("Playcount", typeof(string));
            dt.Columns.Add("AlbumArt", typeof(string));
            for (int i = 0; i < 5; i++)
            {
                lblInfo.InnerText = artist;
                name = (stuff.topalbums.album[i].name.ToString());
                playcount = stuff.topalbums.album[i].playcount.ToString();
                image = stuff.topalbums.album[i].image[2].text.ToString();
                System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.Cells[2].FindControl("Image1");
                img.ImageUrl = image;

                dt.Rows.Add(artist, name, playcount, image);
            }
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        else
            lblInfo.InnerText = "Please Enter an Artist Name";
    }

这里是代码抛出错误:

System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.Cells[2].FindControl("Image1");
img.ImageUrl = image; // This is where Error Comes

【问题讨论】:

  • 我在您的代码中找不到任何关于 btnMusic_Submit 控件的信息,这是一个 Button 控件 ID,它位于何处?如果是真的,我可以确定使用的是 Button 的 EventArgs 而不是 Gridview 之一。
  • 是的,它是按钮控件 ID ...它应该在 .aspx 页面中
  • 看来我找到了问题的根源,你能澄清一下txtMusic也属于gridview之外吗?带有 gridview 的输入页面的屏幕截图可能有助于可视化 gridview 内容。
  • 另外,名称、播放次数和图像未声明,我可以看到。
  • tetsuya 是的,它属于 gridview 之外

标签: c# asp.net image gridview webforms


【解决方案1】:

以下代码适用于我。但它在该页面中的某些其他按钮中出现错误)单击事件 请找到它并帮助我

<ItemTemplate>
   <asp:Image ID="Image1" runat="server" Height="66px" Width="66px" />
</ItemTemplate>

 Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim dr As DataRowView = CType(e.Row.DataItem, DataRowView)
            If Not IsDBNull(dr("data")) Then
                Dim imageUrl As String = "data:image/jpg;base64," & Convert.ToBase64String(CType(dr("Data"), Byte())).ToString
                DirectCast(e.Row.FindControl("Image1"), Image).ImageUrl = imageUrl
            End If
        End If
    End Sub

这是非常特殊的情况。

代码可以正常工作。但严重影响页面事件 - 请注意此 pont

【讨论】:

  • 您的答案不是答案,因为您在这里提出了另一个问题,这应该是您请求帮助时的新问题。
【解决方案2】:

问题不在这一行

img.ImageUrl = image;

但是之前的那一行

System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.Cells[2].FindControl("Image1");

您正在使用e.Row.Cells,但您在按钮单击中使用它,而不是在 RowDataBound 事件中,因此e 没有Row 属性。使用

GridView1.Rows[i].Cells[2].FindControl("Image1");

【讨论】:

    【解决方案3】:

    将您的模板更改为

    <asp:TemplateField HeaderText="Album Art">
        <ItemTemplate>
            <asp:Image ID="Image1" runat="server" Width="174px" Height="174px" ImageUrl='<%# Eval("AlbumArt") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    

    更改背后的代码:

    for(int i = 0; i < 5; i++)
    {
        lblInfo.InnerText = artist;
        string name = (stuff.topalbums.album[i].name.ToString());
        string playcount = stuff.topalbums.album[i].playcount.ToString();
        string image = stuff.topalbums.album[i].image[2].text.ToString();
        //System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.Cells[2].FindControl("Image1");
        //img.ImageUrl = image;
    
        dt.Rows.Add(artist, name, playcount, image);
    }
    

    【讨论】:

    • 还是同样的问题
    • 为我工作。有什么问题?你确定你在“东西”中得到了正确的数据吗?
    • 是的......一切正常......我能够显示播放次数,专辑名称等
    • 但是当我尝试绑定图像时,它在 e.row e.Row.Cells[2](System.Web.UI.WebControls.Image 中显示“EventArgs 不包含行图像网格视图的定义” )e.Row.Cells[2].FindControl("Image1");
    • 您必须注释掉这些行。你不需要它们。
    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 2011-05-20
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多