我看到这样一个例子
' Visual Basic 
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _ 
      ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) _ 
      Handles DataGrid1.ItemDataBound 
   Dim itemType As ListItemType = e.Item.ItemType 
   If ((itemType = ListItemType.Pager) Or _ 
      (itemType = ListItemType.Header) Or _ 
      (itemType = ListItemType.Footer)) Then 
      Return 
   Else 
      Dim button As LinkButton = _ 
         CType(e.Item.Cells(0).Controls(0), LinkButton) 
      e.Item.Attributes("onclick") = _ 
         Page.GetPostBackClientHyperlink(button, "") 
   End If 
End Sub 但是      Dim button As LinkButton = _ 
         CType(e.Item.Cells(0).Controls(0), LinkButton) 
报错啊!!!

解决方案 »

  1.   

    不要死搬硬套啊,他的DataGrid里有 LinkButton ,但是你的有吗?
    大体的原理倒是那样,就是利用Attributes
      

  2.   

    e.Item.Cells(0).Controls(0)指第一列第一个控件,对应你的DataGrid进行修改
      

  3.   

    你最好确定一下cells[0].control[0]是不是linkbutton对象,可以显示出来看一下
      

  4.   

    <Columns>
    <asp:HyperLinkColumn DataTextField="PersonID" HeaderText="ID"></asp:HyperLinkColumn>
    <asp:BoundColumn DataField="PersonID" HeaderText="PersonID"></asp:BoundColumn>
    asp:BoundColumn DataField="PersonEmail" HeaderText="PersonEmail"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonName" HeaderText="PersonName"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonSex" HeaderText="PersonSEX"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonImageType" HeaderText="PersonImageType"></asp:BoundColumn>
    </Columns>
    不行,
    转换类型无效。
      

  5.   

    俺又改成
    <Columns>
    <asp:templatecolumn>
    <itemtemplate>
    <asp:linkbutton text='<%# container.dataitem("PersonID") %> ' Runat="server" ></asp:linkbutton>
    </itemtemplate>
    </asp:templatecolumn>
    <asp:BoundColumn DataField="PersonEmail" HeaderText="PersonEmail"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonName" HeaderText="PersonName"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonSex" HeaderText="PersonSEX"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonImageType" HeaderText="PersonImageType"></asp:BoundColumn>
    </Columns>
    结果还是不行。*********************************************************************
    提示:类型“LinkButton”的控件“DataGrid1__ctl2_Linkbutton1”必须放在具有 runat=server 的窗体标记内。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“LinkButton”的控件“DataGrid1__ctl2_Linkbutton1”必须放在具有 runat=server 的窗体标记内。***********************************************************************俺最后仔细检查了,FORM和DATAGRID都runat=server 了,俺心不甘那,问题解决不了俺难受啊!!!
      

  6.   

    你看一下,你的绑定的linkbutton,有没有单击事件
      

  7.   

    <asp:TemplateColumn HeaderText="详细信息">
    <ItemStyle Width="100px"></ItemStyle>
    <ItemTemplate>
    <asp:LinkButton id="LinkButton1" runat="server">详细信息.....</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    把代码写在这个事件里
    private void DataGrid1_ItemCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    }
      

  8.   

    CSDN的好兄弟们,我把代码贴一下,大家看一下,我想实现点击下方GRID中的某行动态显示IMAG的图象。目前存在问题就是我点GRID有CLICK事件发生了,但是如果不点GRID第一列HyperLinkColumn,IE地址拦内容不改变。也就没有动态显示图片。如果点了,整个页面就成了一张图片,GRID和TEXTBOX都不见了。数据库表是
    Drop Table Person
    Go
    Create Table Person
    (
    PersonID Int Identity,
    PersonEmail Varchar(255),
    PersonName Varchar(255),
    PersonSex Char(1),
    PersonDOB DateTime,
    PersonImage Image,
    PersonImageType Varchar(255)
    )
    *********************************************
    WebForm5.aspx<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm5.aspx.vb" Inherits="Webwuye.WebForm5"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>WebForm5</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <INPUT id="PersonImage" style="Z-INDEX: 101; LEFT: 241px; WIDTH: 228px; ZOOM: 95%; POSITION: absolute; TOP: 26px; HEIGHT: 24px; borderBottomWidth: 2cm"
    type="file" size="18" name="PersonImage" runat="server">
    <asp:button id="Button1" style="Z-INDEX: 102; LEFT: 256px; POSITION: absolute; TOP: 60px" onclick="click"
    Text=" 添  加 " Runat="server"></asp:button></form>
    <P><asp:image id="Image1" style="Z-INDEX: 103; LEFT: 17px; POSITION: absolute; TOP: 11px" runat="server"
    ImageUrl='webform5.aspx?ID=<%# databinder.eval(container.dataitem,"personid"%>' Height="142px" Width="197px"></asp:image></P>
    </FORM><asp:datagrid id="DataGrid1" style="Z-INDEX: 104; LEFT: 41px; POSITION: absolute; TOP: 235px"
    runat="server" AutoGenerateColumns="False">
    <Columns>
    <asp:HyperLinkColumn DataNavigateUrlField="personid" DataNavigateUrlFormatString="webform5.aspx?imgid={0}"
    DataTextField="personid" HeaderText="personID"></asp:HyperLinkColumn>
    <asp:BoundColumn DataField="PersonEmail" HeaderText="PersonEmail"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonName" HeaderText="PersonName"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonSex" HeaderText="PersonSEX"></asp:BoundColumn>
    <asp:BoundColumn DataField="PersonImageType" HeaderText="PersonImageType"></asp:BoundColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF" Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
    </body>
    </HTML>
      

  9.   

    Imports System.IO
    Imports System.Data.SqlClient
    Imports System.Data
    Imports System.Web.UI.WebControlsPublic Class WebForm5
        Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents PersonImage As System.Web.UI.HtmlControls.HtmlInputFile
        Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents Image1 As System.Web.UI.WebControls.Image    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            Dim imgID As Int16 = Request.QueryString("ImgID")        Dim myConnection As New SqlConnection("Data Source=localhost;Initial Catalog=test;User Id=sa;Password=;")
            Dim myCommand As New SqlCommand        If imgID > 0 Then
                myCommand.CommandText = "Select * from Person where personId =" & imgID
            Else
                myCommand.CommandText = "Select * from Person"
            End If
            myCommand.Connection = myConnection
            Dim myDataReader As SqlDataReader
            Try
                myConnection.Open()
                If imgID > 0 Then
                    myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
                    If myDataReader.Read() Then
                        '    Do While (myDataReader.Read())
                        Response.ContentType = "image/pjpeg"
                        'Response.ContentType = myDataReader.Item("PersonImageType")
                        'Image1.DataBind = myDataReader.Item("prosnimage")
                        Response.BinaryWrite(myDataReader.Item("PersonImage"))
                        '    Loop
                    End If
                Else
                    DataGrid1.DataSource = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
                    DataGrid1.DataBind()
                End If
                myConnection.Close()        Catch SQLexc As SqlException
                Response.Write("Read Failed : " & SQLexc.ToString())
            End Try
            'Dim DB As Container()
        End Sub
        Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound        If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then            '     e.Item.Attributes.Add("onclick", "this.style.backgroundColor='#FFFFFF';alert('您点击的是:\n\n第" _
                '+ e.Item.Cells(0).Controls(0).ToString() + "行\n\n文章标题是:" + e.Item.Cells(0).Text.Replace(",", "\'") + "')")
                Dim Hpl As HyperLink = CType(e.Item.Cells(0).Controls(0), HyperLink)
                e.Item.Attributes("onclick") = Page.GetPostBackClientHyperlink(Hpl, "DataNavigateUrlFormatString")            'Dim button1 As LinkButton = CType(e.Item.Cells(0).Controls(0), LinkButton)
                'e.Item.Attributes("onclick") = Page.GetPostBackClientHyperlink(button1, "")            ' If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
                '     e.Item.Attributes.Add("onclick", "this.style.backgroundColor='#FFFFFF';alert('您点击的是:\n\n第" _
                '+ e.Item.ItemIndex.ToString() + "行\n\n文章标题是:" + e.Item.Cells(0).Text.Replace(",", "\'") + "')")
                ''e.Item.Cells(1).Text = e.Item.Cells(1).Text.ToString()
                'If e.Item.Cells(0).Text.Length > 30 Then
                '    e.Item.Attributes.Add("Title", e.Item.Cells(0).Text)
                '    e.Item.Cells(0).Text = e.Item.Cells(0).Text.Substring(0, 28) + "…"
                'End If
            End If
        End SubPublic Sub Click(ByVal sender As System.Object, ByVal e As System.EventArgs)        Dim intImageSize As Int64
            Dim ImageStream As Stream
            Dim strImageType As String        ' 获得图片的大小
            intImageSize = PersonImage.PostedFile.ContentLength
            '获得图片类型()
            strImageType = PersonImage.PostedFile.ContentType
            Response.Write(strImageType.ToString)
            'If strImageType.ToString() <> "image/pjpeg" Then
            '    Response.Write("<script language=javascript>alert('对不起请选择图片类型文件!')</script>")
            '    Exit Sub
            'End If        '读取图片
            ImageStream = PersonImage.PostedFile.InputStream
            '建立图片长度的字节数组
            Dim ImageContent(intImageSize) As Byte
       
            '从图片源读入到ImageContent字节数组中
            ImageStream.Read(ImageContent, 0, intImageSize)        ' 创建Connection和Command对象
            Dim strCnn As String = "Data Source=localhost;Initial Catalog=test;User Id=sa;Password=;"
            Dim myConnection As New SqlConnection(strCnn)
            'Dim myCommand As New SqlCommand("sp_person_isp", myConnection)        Dim strCmd As String = "insert into person (PersonImage)  values (@imgPerson) "
            Dim myCommand As New SqlCommand(strCmd, myConnection)
            myCommand.Parameters.Add("@imgPerson", SqlDbType.Image).Value = ImageContent        
          
            Try
                myConnection.Open()
                myCommand.ExecuteNonQuery()
                'myConnection.Close()
                Response.Write("<script language=javascript>alert('添加成功!')</script>")
                'Response.Write("添加成功!")
            Catch SQLexc As SqlException
                'Response.Write("<li> 添加失败,Message原因:" & SQLexc.Message())
                Response.Write("<li> 添加失败,ToString原因:" & SQLexc.ToString())
            Finally
                myConnection.Close()
            End Try
          
        End Sub
    End Class