Datasource的数据源是Arraylist,而且列数无法确定,要根据查询结果动态的生成。由于对Arraylist的结构不是很清楚,我不知道该怎样动态的设定每一列的DataFeild和HeaderText,请高手支招。

解决方案 »

  1.   

    下面的代码可以自动排序,试试。http://bingning.net
    private void Form1_Load(object sender, EventArgs e)
    {    DataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(
            DataGridView1_RowsAdded);
        DataGridView1.CellValueChanged += new DataGridViewCellEventHandler(
            DataGridView1_CellValueChanged);
        DataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(
            DataGridView1_ColumnHeaderMouseClick);
    }
    private void DataGridView1_ColumnHeaderMouseClick(object sender,
        DataGridViewCellMouseEventArgs e)
    {
        DataGridViewColumn clickedColumn = DataGridView1.Columns[e.ColumnIndex];
        if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic)
            this.SortRows(clickedColumn, true);
    }
    private void DataGridView1_RowsAdded(object sender,
        DataGridViewRowsAddedEventArgs e)
    {
        this.SortRows(DataGridView1.SortedColumn, false);
    }
    private void DataGridView1_CellValueChanged(object sender,
        DataGridViewCellEventArgs e)
    {
        if (DataGridView1.SortedColumn != null &&
            e.ColumnIndex == DataGridView1.SortedColumn.Index)
            this.SortRows(DataGridView1.SortedColumn, false);
    }
    private void SortRows(DataGridViewColumn sortColumn, bool orderToggle)
    {
        if (sortColumn == null)
            return;    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic &&
            DataGridView1.SortedColumn != null &&
            !DataGridView1.SortedColumn.Equals(sortColumn))
        {
            DataGridView1.SortedColumn.HeaderCell.SortGlyphDirection =
                SortOrder.None;
        }    ListSortDirection sortDirection;
        if (orderToggle)
        {
            sortDirection =
                DataGridView1.SortOrder == SortOrder.Descending ?
                ListSortDirection.Ascending : ListSortDirection.Descending;
        }
        else
        {
            sortDirection =
                DataGridView1.SortOrder == SortOrder.Descending ?
                ListSortDirection.Descending : ListSortDirection.Ascending;
        }
        SortOrder sortOrder =
            sortDirection == ListSortDirection.Ascending ?
            SortOrder.Ascending : SortOrder.Descending;    DataGridView1.Sort(sortColumn, sortDirection);    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic)
        {        sortColumn.HeaderCell.SortGlyphDirection = sortOrder;
        }
    }
      

  2.   

    由于每次生成的arraylist的列数和里面的属性值是不定的,我生成gridview时,怎样把arraylist里的属性名动态赋给HeaderText,并把属性值赋给DataField呢?
      

  3.   

      BoundField bf = new BoundField();
                    bf.HeaderText = "Item";
                    ScheduleGrid.Columns.Add(bf);
                    DataSet ds = GridBind.GridViewBind(reportType, productType);
                 //数据动态绑定
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                            BoundField bf1 = new BoundField();
                            bf1.DataField = ds.Tables[0].Rows[i][1].ToString();
                            bf1.HeaderText = ds.Tables[0].Rows[i][1].ToString();
                            ScheduleGrid.Columns.Add(bf1);
                          
                    }