我在一个WEBFROM中设置了一个DataGrid,并且使用属性设置页面在DataGrid里设置了一个按钮列,一切运行正常。后来我又新建了一个网页用同样的方法去设置了一个DataGrid,这次居然不能激活DataGrid1_SelectedIndexChanged事件,真是奇怪!我对照过语句,没有任何差别啊!怎么在第一个页面就可以,第二个页面就不行了呢?奇怪啊!!!

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3491/3491697.xml?temp=.8046686
      

  2.   

    不应该啊?runnat=server?不过如果没有写上面的那话,你应该看见DATAGRID出错才对
      

  3.   

    我又试过再新建一个页面了,问题同样存在,感觉好像是datagrid的SelectedIndexChanged事件只能在第一个页面使用,其他就激活不了了
      

  4.   

    你是直接把代码拷到另一个页面吧,那肯定不会触发事件的。
    在初始化函数里加入绑定事件语句就行了
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load);}
      

  5.   

    朋友,我看不懂你的程序,是VB。NET还是ASP。NET?
      

  6.   

    首先你用的语法是vb.net还是C#,---它们都可以写asp.net
    注意这个:打开属性生成器看看你的按钮列的CommandName是否“Select”,只有这个命令才能用触发SelectedIndexChanged事件,否则只能用ItemCommand事件里捕获;
    也可以在ItemCommand事件里跟踪一下string tmp = e.CommandName看看
      

  7.   

    1、我用的是vb.net
    2、我已经做到你说的了,但是还是无效。
      

  8.   

    我看了VB.NET的自动生成代码,它没有在初始化的时候把事件绑定,C#里却可以,如果出现事件失效可能要看看事件的参数对不对,能给出原来的代码吗?
      

  9.   

    Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.SelectedIndexChanged    End Sub
    这个是VS.NET2003自动生成的,关键在于Handles DataGrid1.SelectedIndexChanged这段吧,只要你的DATAGRID和这段的名字一样应该就可以
      

  10.   

    我把程序试着放到ItemCommand事件里,但是测试结果依然是事件无法触发。
      

  11.   

    这是我整个ASPX页面的代码:
    Imports SystemImports System.Data.SqlClient
    Public Class jxz
        Inherits System.Web.UI.Page
        Dim Sqlcnn As SqlConnection#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents Label1 As System.Web.UI.WebControls.Label
        Protected WithEvents Label2 As System.Web.UI.WebControls.Label
        Protected WithEvents Label3 As System.Web.UI.WebControls.Label
        Protected WithEvents Label4 As System.Web.UI.WebControls.Label
        Protected WithEvents Label5 As System.Web.UI.WebControls.Label
        Protected WithEvents Label6 As System.Web.UI.WebControls.Label
        Protected WithEvents Label7 As System.Web.UI.WebControls.Label
        Protected WithEvents Label8 As System.Web.UI.WebControls.Label
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
        Protected WithEvents Label9 As System.Web.UI.WebControls.Label
        Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
        Protected WithEvents DataGrid2 As System.Web.UI.WebControls.DataGrid    '注意: 以下占位符声明是 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
            Sqlcnn = New SqlClient.SqlConnection
            Sqlcnn.ConnectionString = "workstation id=WIN2003;packet size=4096;user id=sa;Pwd=123456789;data source=""192.168.0.2"";pers" & _
                                          "ist security info=False;initial catalog=sfxtdb"
            Sqlcnn.Open()
            Dim SqlDa As New SqlClient.SqlDataAdapter("select *  from tbJX where 检修员领单时间 is NULL ", Sqlcnn)
            Dim dt As New DataSet
            SqlDa.Fill(dt, "tbJX")
            Dim Table As New DataTable
            Table = dt.Tables(0)
            DataGrid1.DataSource = Table
            DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.SelectedIndexChanged
            Dim bh As Integer = DataGrid1.SelectedItem.Cells(1).Text
            Dim SqlDa As New SqlClient.SqlDataAdapter("select *  from tbJX where 工程编号=" & bh & "", Sqlcnn)
            Dim dt As New DataSet
            SqlDa.Fill(dt, "tbJX")
            Dim Table As New DataTable
            Table = dt.Tables(0)
            Label9.Text = Table.Rows(0).Item(1)
            Label2.Text = Table.Rows(0).Item(2)
            Label3.Text = Table.Rows(0).Item(3)
            Label4.Text = Table.Rows(0).Item(4)
            Label5.Text = Table.Rows(0).Item(6)
            Label6.Text = Table.Rows(0).Item(7)
            Label7.Text = Table.Rows(0).Item(5)
            Label8.Text = Table.Rows(0).Item(9)
        End Sub
    End Class
      

  12.   

    难倒非得用selectindexchange这个事件吗?
    用其他的事件一样可以完成上面的功能的.例如ItemCommand就可以呀!
      

  13.   

    你这个程序可能有以下2个问题:
    1。在Page_Load里面的绑定,要写在条件not ispostback里面,否则,你每一次都要重新查一次数据库,最好把你的datatable写进session中,
    2.你的DataGrid1_PageIndexChanged事件里面没有重新绑定数据,DataGrid1_PageIndexChanged里面必须要重新绑定一次。
    我给你写了个小例子,在你贴子http://community.csdn.net/Expert/topic/3556/3556739.xml?temp=1.119632E-02里面。
    希望能帮助你解决这个问题。
      

  14.   

    1。在Page_Load里面的绑定,要写在条件not ispostback里面,否则,你每一次都要重新查一次数据库,最好把你的datatable写进session中,
    2.你的DataGrid1_PageIndexChanged事件里面没有重新绑定数据,DataGrid1_PageIndexChanged里面必须要重新绑定一次。
    我给你写了个小例子,在你贴子http://community.csdn.net/Expert/topic/3556/3556739.xml?temp=1.119632E-02里面。
    希望能帮助你解决这个问题。
      

  15.   

    1、事件脱绑
    2、检查控件的ID和在程序代码的预定义
    3、查看datagrid的viewstate又没有设置为true,如果是false的话,那么你永远得不到你的目的
      

  16.   

    在page_load里面加上
    If Not Page.IsPostBack Then
       BindDataGrid()
    End If
    然后把每个控件要选择的方法重新选择一次,通俗的说就是重新把它用“.”给点出来
    对了,Private Sub BindDataGrid()这个也不能少~~!
      

  17.   

    第一种可能,事件脱绑
    解决办法,看Vs生成的代码中有无Datagrid1.xxxx+=....
    如果没有,自己加上。或者使用属性窗口把事件删除再重新加上。
    第二种可能,使用了pushButton,这是DataGrid的一个bug,事件会不能触发,即使你在代码中绑定了事件。建议使用LinkButton。