<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %><Script Runat="Server">Sub Page_Load
   If Not IsPostBack Then
      BindDataGrid( "title" )
   End If
End Sub
Sub BindDataGrid( strSortField As String )
Dim conPubs As SqlConnection
Dim cmdSelect As SqlCommand
Dim dadTitles As SqlDataAdapter
Dim dstTitles As DataSet
dim Sql as string 
conPubs = New SqlConnection( "Server=localhost;UID=sa;PWD=secret;Database=Pubs" )
Sql="Select * From T1 Order by " & strsortField
dadTitles = New SqlDataAdapter(Sql, conPubs )
          
dstTitles = New DataSet
dadTitles.Fill( dstTitles )

dgrdTitles.DataSource = dstTitles
dgrdTitles.DataBind()
conPubs.Close()
End SubSub dgrdTitles_SortCommand( s As Object, e As DataGridSortCommandEventArgs )
BindDataGrid( e.SortExpression )
End Sub</Script><html>
<head><title>DataGridSort.aspx</title></head>
<body>
<form Runat="Server"><asp:DataGrid ID="dgrdTitles"
  AllowSorting="True"
  AutoGenerateColumns ="False"
  OnSortCommand="dgrdTitles_SortCommand"
  Runat="Server" >
   <Columns>
          <asp:BoundColumn ItemStyle-Height="22" DataField="Title_id"    SortExpression="Title_id"
           HeaderText="文章标题"
           HeaderStyle-Font-Bold="True"></asp:BoundColumn>
        </Columns></asp:DataGrid>  </form>
</body>
</html>以上代码可以实现排序,运行正常
但是如果我需要动态的填加列就不行了,点击列头时连排序事件都不会触发,代码如下<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %><Script Runat="Server">Sub Page_Load
   Dim mBoundColumn As BoundColumn
   dim fn as string
    fn="title_id"
    mBoundColumn = New BoundColumn
    mBoundColumn.HeaderText = fn
    mBoundColumn.DataField = fn
    mBoundColumn.SortExpression = fn
    dgrdTitles.Columns.Add(mBoundColumn)    If Not IsPostBack Then
      BindDataGrid( "title" )
   End If
End Sub
Sub BindDataGrid( strSortField As String )
Dim conPubs As SqlConnection
Dim cmdSelect As SqlCommand
Dim dadTitles As SqlDataAdapter
Dim dstTitles As DataSet
dim Sql as string 
conPubs = New SqlConnection( "Server=localhost;UID=sa;PWD=secret;Database=Pubs" )
Sql="Select * From T1 Order by " & strsortField
dadTitles = New SqlDataAdapter(Sql, conPubs )
          
dstTitles = New DataSet
dadTitles.Fill( dstTitles )

dgrdTitles.DataSource = dstTitles
dgrdTitles.DataBind()
conPubs.Close()
End SubSub dgrdTitles_SortCommand( s As Object, e As DataGridSortCommandEventArgs )
BindDataGrid( e.SortExpression )
End Sub</Script><html>
<head><title>DataGridSort.aspx</title></head>
<body>
<form Runat="Server"><asp:DataGrid ID="dgrdTitles"
  AllowSorting="True"
  AutoGenerateColumns ="False"
  OnSortCommand="dgrdTitles_SortCommand"
  Runat="Server" >
</asp:DataGrid>  </form>
</body>
</html>