排序前行的背景颜色为红色,排序后行的背景颜色变成了默认色
排序前行高为30(如),排序后行高变成了默认行高求解
神啊!救救我吧!!

解决方案 »

  1.   

    对DataGridView的数据源进行排序不会有这样的问题吧?
      

  2.   

    用SortMode = DataGridViewColumnSortMode.Automatic实现也是一样的
    我现在用的DataGridViewColumnSortMode.Programmatic
    DataGridView.Sort(Column, direction);
      

  3.   

    排序 你可以在数据库里面order by  前行显示方式 可以在 DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)事件中写
      

  4.   

    不行啊,各位老大给个例子嘛,对数据源排序后需要重新绑定到GridView吗?我用DataTableView的Sort貌似没有作用..
      

  5.   

    其实上面说的是你在把数据源绑定到datagridview之前就排好序,可以用SQL在从数据库拿出来时就排好,也可以用dataset的方法,甚至可以用个循环自己制定判断条件。
    在绑好数据后用datagridview控件方法排序是影响到你界面外观变动的原因
      

  6.   

    那样的话你要在后台对datagridview样式进行控制,应该有对应的事件能写进去吧,你可以查下msdn
      

  7.   

    你是说重新绘制样式吗?OnCellPainting我原来就重写了,关键是排序后他把我的样式清除了,所以重绘当然也是绘制的不对 
      

  8.   

    或者谁能告诉我DataGridView怎么对应排序前和排序后的行也可以,那样我可以在排序前记录样式,排序后找到排序前的样式后付给排序后的行
      

  9.   

    web程序的话,在显示前有事件databinding能调用,你可以在那里重写样式,winfrom的话不清楚是哪个事件,但肯定也有对应的
      

  10.   

    在哪儿重写样式我知道,关键是排序后我的样式根本就丢了(样式每行不一样,并不固定),所以重绘样式根本不知道要绘制哪个样式(此DataGridView为公用自定义控件,不可能根据某数据特殊定制)
      

  11.   

    可是不仅仅是行高的问题,我还需要如BackColor
      

  12.   

    <asp:datagrid id="dg_xx" visible="true" backcolor="red"  ></datagrid>
    这样直接设了有没有用?有用的话,你在后台用属性来控制也应该是可行的。还要查下,是不是默认的css控制了样式
      

  13.   

    非常感谢ledmhcc直接设置是有用的,点击排序后所设置就丢失了,另外,忘记说了,是WINFORM
    请问排序前和排序后的行有对应关系吗?
      

  14.   

    靠,逼我使大招...我用最笨的方法实现行不....代码如下,请各位高手给个更好的解决方案
    protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
            {
                base.OnColumnHeaderMouseClick(e);
                if (e.Button == MouseButtons.Right)
                {
                    TDataGridViewFilter filter = new TDataGridViewFilter(this, e);
                    this.Controls.Add(filter);
                }
                #region//自定义编程排序方式
                if (e.Button == MouseButtons.Left && this.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
                {
                    // 检查已经排序的列
                    DataGridViewColumn newColumn = this.Columns[e.ColumnIndex];
                    DataGridViewColumn oldColumn = this.SortedColumn;
                    ListSortDirection direction;                // 判断排序方式
                    if (oldColumn != null)
                    {
                        if (oldColumn == newColumn &&
                            this.SortOrder == SortOrder.Ascending)
                        {
                            direction = ListSortDirection.Descending;
                        }
                        else
                        {
                            direction = ListSortDirection.Ascending;
                            oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
                        }
                    }
                    else
                    {
                        direction = ListSortDirection.Ascending;
                    }                // 排序
                    if (newColumn != null)
                    {
                        SortedList<string, DataGridViewCellStyle> st1 = new SortedList<string, DataGridViewCellStyle>();
                        SortedList<string, int> rowheight = new SortedList<string, int>();
                        foreach (DataGridViewRow row in this.Rows)
                        {
                            string guid = null;
                            foreach (DataGridViewColumn col in this.Columns)
                            {
                                guid += row.Cells[col.Name].Value.ToString();
                            }
                            st1.Add(guid, row.DefaultCellStyle.Clone());
                            rowheight.Add(guid, row.Height);
                        }                    this.Sort(newColumn, direction);
                        this.IfReBind = false;
                        //图标
                        newColumn.HeaderCell.SortGlyphDirection =
                            direction == ListSortDirection.Ascending ?
                            SortOrder.Ascending : SortOrder.Descending;
                        //重新绑定外观
                        //this.DefaultCellStyle = st0;
                        foreach (DataGridViewRow row in this.Rows)
                        {
                            string guid = null;
                            foreach (DataGridViewColumn col in this.Columns)
                            {
                                guid += row.Cells[col.Name].Value.ToString();
                            }                        row.DefaultCellStyle = st1[guid];
                            row.Height = rowheight[guid];
                        }
                        //重新过滤
                        this.OnFilterStringChanged(this._FilterString);
                    }
                }
                #endregion
            }
      

  15.   

    用以用DataView 进行排序啊!!!
      

  16.   

    忘记发类名称了
     public partial class TDataGridView : DataGridView
      

  17.   

    排序后重新banding数据吗?请修改我发的代码,谢谢
      

  18.   

    没有关系啊
    if (e.Button == MouseButtons.Left && this.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
      

  19.   

    有一个Sorted的事件,在排序后重新设定相同的样式吧