DataGrid中动态创建其中的列并设置了列的SortExpresion属性和sortcommand事件而出现sortcommand事件不运行?

解决方案 »

  1.   

    在Page_Load()中
    把邦定DataGrid的那段代码放到if(!Page.IsPostBack)里
      

  2.   

    什么代码也没有,怎么看,给你一段,自己对比一下<%@ Import Namespace="System.Data" %><html>
    <script language="VB" runat="server">    Dim SortField As String    Function CreateDataSource() As ICollection
            
            Dim dt As DataTable
            Dim dr As DataRow
            Dim i As Integer        'create a DataTable
            dt = New DataTable
            dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
            dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
            dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
            dt.Columns.Add(New DataColumn("BoolValue", GetType(Boolean)))
            dt.Columns.Add(new DataColumn("CurrencyValue", GetType(Double)))        'Make some rows and put some sample data in
            For i = 1 To 9
                dr = dt.NewRow()
                dr(0) = 9-i
                dr(1) = "Item " & i.ToString()
                dr(2) = DateTime.Now.ToShortTimeString
                If (i Mod 2 <> 0) Then
                    dr(3) = True
                Else
                    dr(3) = False
                End If
                dr(4) = 1.23 * (i + 1)
                'add the row to the datatable
                dt.Rows.Add(dr)
            Next        'return a DataView to the DataTable
            Dim dv as DataView = New DataView(dt)
            dv.Sort = SortField
            CreateDataSource = dv
        End Function            Sub Page_Load(sender As Object, e As EventArgs) 
            If Not IsPostBack Then
                If SortField = "" Then
                    SortField = "IntegerValue"
                End If    
                BindGrid
            End If
        End Sub
        
        Sub MyDataGrid_Sort(sender As Object, e As DataGridSortCommandEventArgs)
            SortField = e.SortExpression
            BindGrid
        End Sub    Sub BindGrid()
            MyDataGrid.DataSource = CreateDataSource()
            MyDataGrid.DataBind
        End Sub
    </script><body>    <h3><font face="Verdana">Basic Sorting in DataGrid</font></h3>    <form runat=server>      <ASP:DataGrid id="MyDataGrid" runat="server"
            AllowSorting="true"
            OnSortCommand="MyDataGrid_Sort"
            BorderColor="black"
            BorderWidth="1"
            CellPadding="3"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#ccccff"
            HeaderStyle-ForeColor="black"
          />  </form></body>
    </html>
      

  3.   

    贴出sortcommand代码,处理完后注意重新捆绑
      

  4.   

    private void DataGridList_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
    {
    string SortExpression=e.SortExpression.ToString(); //获得当前排序表达式
    string SortDirection="ASC"; //为排序方向变量赋初值
    if(SortExpression==ViewState["SortExpression"].ToString()) //如果为当前排序列
    {
    SortDirection=(ViewState["SortDirection"].ToString()==SortDirection?"DESC":"ASC"); //获得下一次的排序状态 }
    ViewState["SortExpression"]=SortExpression;
    ViewState["SortDirection"]=SortDirection;
    GetDataDataSource();
    }
    另外看看
    this.DataGridList.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGridList_SortCommand);
    是否存在
      

  5.   

    是这样的
    Page_Load()中不能把邦定DataGrid的那段代码放到if(!Page.IsPostBack)里
    if(!Page.IsPostBack)我是用来初始化统计条件的,然后根据条件动态的创建Datagrid的列;这时候在页面的查询条件下显示统计结果。
      

  6.   

    代码如下:
    <%@ Import Namespace="System.Data" %><html>
    <script language="VB" runat="server">    Dim SortField As String    Function CreateDataSource() As ICollection
            
            Dim dt As DataTable
            Dim dr As DataRow
            Dim i As Integer        'create a DataTable
            dt = New DataTable
            dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
            dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
            dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
            dt.Columns.Add(New DataColumn("BoolValue", GetType(Boolean)))
            dt.Columns.Add(new DataColumn("CurrencyValue", GetType(Double)))        'Make some rows and put some sample data in
            For i = 1 To 9
                dr = dt.NewRow()
                dr(0) = 9-i
                dr(1) = "Item " & i.ToString()
                dr(2) = DateTime.Now.ToShortTimeString
                If (i Mod 2 <> 0) Then
                    dr(3) = True
                Else
                    dr(3) = False
                End If
                dr(4) = 1.23 * (i + 1)
                'add the row to the datatable
                dt.Rows.Add(dr)
            Next        'return a DataView to the DataTable
            Dim dv as DataView = New DataView(dt)
            dv.Sort = SortField
            CreateDataSource = dv
        End Function            Sub Page_Load(sender As Object, e As EventArgs) 
            If Not IsPostBack Then
                If SortField = "" Then
                    SortField = "IntegerValue"
                End If    
                
            End If
        End Sub
        sub cmdfind_click(sender As Object, e As EventArgs)   BindGrid()
        end sub
        Sub MyDataGrid_Sort(sender As Object, e As DataGridSortCommandEventArgs)
            SortField = e.SortExpression
            BindGrid
        End Sub    Sub BindGrid()
            MyDataGrid.DataSource = CreateDataSource()
            MyDataGrid.DataBind
        End Sub
    </script><body>    <h3><font face="Verdana">Basic Sorting in DataGrid</font></h3>    <form runat=server>      <ASP:DataGrid id="MyDataGrid" runat="server"
            AllowSorting="true"
            OnSortCommand="MyDataGrid_Sort"
            BorderColor="black"
            BorderWidth="1"
            CellPadding="3"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#ccccff"
            HeaderStyle-ForeColor="black"
          />  </form></body>
    </html>
    执行完cmdfind_click并显示Datagrid可是当要排序时其中的sortcommand事件就是不执行