偶用DataGrid显示一个表中的所有数据,并将控件的AllowSorting 属性设为True.开始排序功能是正常的.但是当我点查询,输入查询条件后,查询结果再绑定到DataGrid上后,就不支持排序了,这是为什么呀?即使我在设置绑定后再设其AlloSorting属性为True也没有用了.

解决方案 »

  1.   

    DataGrid好像不可以吧,需要结合DataView
      

  2.   

    <%@ Page Language="C#" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %>
     
    <html>
       <script runat="server">
     
          ICollection CreateDataSource()
          {
          
             // Create a Random object to mix up the order of items in the
             // sample data.
             Random Rand_Num = new Random();         // Create sample data for the DataGrid control.
             DataTable dt = new DataTable();
             DataRow dr;
     
             // Define the columns of the table.
             dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
             dt.Columns.Add(new DataColumn("StringValue", typeof(String)));
             dt.Columns.Add(new DataColumn("CurrencyValue", typeof(Double)));
     
             // Populate the table with sample values.
             for (int i=0; i<=8; i++) 
             {            dr = dt.NewRow();
     
                dr[0] = i;
                dr[1] = "Item " + Rand_Num.Next(1, 15).ToString();
                dr[2] = 1.23 * Rand_Num.Next(1, 15);
     
                dt.Rows.Add(dr);
             
             }         // To persist the data source between posts to the server,
             // store it in session state.  
             Session["Source"] = dt;
     
             DataView dv = new DataView(dt);         return dv;
          
          }
     
          void Page_Load(Object sender, EventArgs e)
          { 
     
             // Load sample data only once, when the page is first loaded.
             if (!IsPostBack)
             { 
             
                ItemsGrid.DataSource = CreateDataSource();
                ItemsGrid.DataBind();
             
             }      }      void Sort_Grid(Object sender, DataGridSortCommandEventArgs e)
          {          // Retrieve the data source from session state.
             DataTable dt = (DataTable)Session["Source"];         // Create a DataView from the DataTable.
             DataView dv = new DataView(dt);         // The DataView provides an easy way to sort. Simply set the
             // Sort property with the name of the field to sort by.
             dv.Sort = e.SortExpression;         // Rebind the data source and specify that it should be sorted
             // by the field specified in the SortExpression property.
             ItemsGrid.DataSource = dv;
             ItemsGrid.DataBind();      }      void Check_Change(Object sender, EventArgs e)
          {
       
             // Allow or prevent sorting depending on the user's selection.
             if (AllowSortingCheckBox.Checked)
             {            ItemsGrid.AllowSorting = true;         }
             else
             {            ItemsGrid.AllowSorting = false;         }         // After changing the property, rebind the data to
             // refresh the DataGrid control.         // Retrieve the data source from session state.
             DataTable dt = (DataTable)Session["Source"];         // Create a DataView from the DataTable.
             DataView dv = new DataView(dt);         // Rebind the data source.
             ItemsGrid.DataSource = dv;
             ItemsGrid.DataBind();      }   </script>
     
    <body>
     
       <form runat=server>
     
          <h3>DataGrid AllowSorting Example</h3>      Select whether to allow sorting in the DataGrid control.      <br><br>
     
          <b>Product List</b>
     
          <asp:DataGrid id="ItemsGrid"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               OnSortCommand="Sort_Grid"
               AutoGenerateColumns="False"
               AllowSorting="True"
               runat="server">         <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle>         <Columns>            <asp:BoundColumn DataField="IntegerValue" 
                     SortExpression="IntegerValue"
                     HeaderText="Item"/>            <asp:BoundColumn DataField="StringValue"
                     SortExpression="StringValue" 
                     HeaderText="Description"/>            <asp:BoundColumn DataField="CurrencyValue" 
                     HeaderText="Price"
                     SortExpression="CurrencyValue"
                     DataFormatString="{0:c}">               <ItemStyle HorizontalAlign="Right">
                   </ItemStyle>            </asp:BoundColumn>         </Columns> 
     
          </asp:DataGrid>      <hr>      <asp:CheckBox id="AllowSortingCheckBox"
               Text="Allow sorting"
               AutoPostBack="True"
               Checked="True"
               OnCheckedChanged="Check_Change"
               runat="server"/>
     
       </form>
     
    </body>
    </html>
      

  3.   

    我的是windows窗体应用程序呀,现在问题是,我绑定时如果直接用查询的结果(一个DataTable)排序正常,但是如果我新建一个DataView设置其DataTable为查询结果的那个DataTable,再把这个DataView绑定到DataGrid上,不能排序.是不是要设置一些DataView的属性才可以呢?要设什么属性呢?