Элементы данных доступа к данным Gridview с привязкой к данным vb

Я пытаюсь использовать ImageUrl для изображения в поле шаблона в GridView, но продолжаю получать сообщение об ошибке:

В экземпляре объекта не задана ссылка на объект. в этой строке:

Dim imagePath As String = rowView("image_path")

Я никогда раньше не делал этого в GridView, но работал в ListView.

Спасибо за любую помощь, вот мой код:

.APSX

        <asp:GridView ID="gvImages" DataKeyNames="id" runat="server" AutoGenerateColumns="False" BorderWidth="0px" GridLines="None">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="imageId" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Image ID="imageFile" runat="server"></asp:Image>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="id" />
        </Columns>
    </asp:GridView>

КОД

Protected Sub gvImages_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvImages.RowDataBound

    Dim rowView As DataRowView = CType(e.Row.DataItem, DataRowView)

    Dim imagePath As String = rowView("image_path")

    Dim strImageUrl As String = "~/admin/images/cases/" & Request.QueryString("uid") & "/" & imagePath

    Dim imageFile As System.Web.UI.WebControls.Image = CType(e.Row.FindControl("imageFile"), System.Web.UI.WebControls.Image)
    imageFile.ImageUrl = strImageUrl

End Sub

person Jammer    schedule 08.03.2011    source источник
comment
Вы уверены, что rowView (image_path) не возвращает DBNULL.   -  person Furqan Hameedi    schedule 08.03.2011
comment
Он содержит имя изображения, поэтому для двойной проверки я просто удалил поле шаблона изображения и добавил image_path в поле с привязкой к данным, и оно отображает имя изображения. так что этого быть не может.   -  person Jammer    schedule 08.03.2011


Ответы (2)


Я думаю, вам нужно проверить, что это строка данных, а не строка заголовка

Попробуй это

Protected Sub gvImages_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvImages.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim rowView As DataRowView = CType(e.Row.DataItem, DataRowView)

        Dim imagePath As String = rowView("image_path")

        Dim strImageUrl As String = "~/admin/images/cases/" & Request.QueryString("uid") & "/" & imagePath

        Dim imageFile As System.Web.UI.WebControls.Image = CType(e.Row.FindControl("imageFile"), System.Web.UI.WebControls.Image)
        imageFile.ImageUrl = strImageUrl

    End If
End Sub
person Nicky Waites    schedule 08.03.2011
comment
Ах, спасибо, Ники, разобрался, я видел что-то подобное при поиске, но не понял, что это ДОЛЖНО быть. Спасибо. Дж. - person Jammer; 08.03.2011
comment
Я был сбит с толку этим много раз в прошлом, так что никаких проблем. - person Nicky Waites; 08.03.2011

пытаться

Dim imagePath As String = e.rowView("image_path").ToString()

Если таблица, привязанная к сетке, имеет столбец "image_path", то вместо этого используйте более простой способ....

<asp:Image id="img1" runat="server" imageUrl = '<%#Eval("image_path")%>' />

Если вы хотите создать какую-то пользовательскую строку

imageurl = '<%# String.Format("{0} - {1} - {2} - {3}", Eval("Name1"), Eval("Name2"), Session["abc"],Request["abc"]) %>'
person Community    schedule 08.03.2011
comment
нет, тоже не работает, я получаю сообщение об ошибке intellisense, говорящее, что rowView не является членом .... но если я сниму e. появляется ошибка intellisense, но я все еще получаю ту же ошибку в этой строке в браузере. - person Jammer; 08.03.2011
comment
Привет, АмРан, да, у меня все работает нормально, но я изучаю .net и хотел бы знать, как это сделать из кода, так как я уверен, что мне придется делать это в будущем. - person Jammer; 08.03.2011