自定义silverlight中datagrid的排序事件

时间:2023-11-10 09:11:38

<sdk:DataGrid AutoGenerateColumns="False" CanUserSortColumns="False" CanUserReorderColumns="False"  IsReadOnly="True" HorizontalAlignment="Left" Margin="0,0,0,86" x:Name="ErrorCodeGrid" Width="662" Grid.Row="1" MouseLeftButtonDown="ErrorCodeGrid_MouseLeftButtonDown">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn Header="日期" Binding="{Binding Date}" Width="110"/>
        <sdk:DataGridTextColumn Header="地市" Binding="{Binding Area}" Width="110"/>
        <sdk:DataGridTextColumn Header="发送/接收" Binding="{Binding Pattern}" Width="95" />
        <sdk:DataGridTextColumn Header="短信类型" Binding="{Binding EmailType}" Width="115"/>
        <sdk:DataGridTextColumn Header="机型" Binding="{Binding PhoneType}" Width="115"/>
        <sdk:DataGridTextColumn Header="比例" Binding="{Binding Ratio}" Width="*"/>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

//下面为单机事件

private void ErrorCodeGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var u = from element in VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), ErrorCodeGrid)
            where element is DataGridColumnHeader
            select element;
    if (u.Count() == 1)
    {
        //鼠标点击的ColumnHeader
        DataGridColumnHeader header = (DataGridColumnHeader)u.Single();
        //要排序的字段
        string _newSort = header.Content.ToString();
        if (dir == "desc")
        {
            dir = "asc";
        }
        else
        {
            dir = "desc";
        }
        sortFiled = _newSort;
        sortHeader = header;
        SortData(dir, sortFiled);
        e.Handled = true;
    }
    else
    {
        e.Handled = false;
    }
}

//排序事件

void SortData(string sortType, string sortFiled)
{
    dDetailList = ChangeResult(DetailList);
    if (sortType == "desc")
    {
        switch (sortFiled)
        {
            case "比例":
                dDetailList = dDetailList.OrderByDescending(u => u.Ratio).ToList();
                break;
 
            default:
                break;
        }
    }
    else
    {
        switch (sortFiled)
        {
            case "比例":
                dDetailList = dDetailList.OrderBy(u => u.Ratio).ToList();
                break;
            default:
                break;
        }
    }
    DetailList = ChangeBackResult(dDetailList);
    fenye("first");
}

//分页事件

void fenye(string done)
       {
           TotalCount = DetailList.Count();
           if (TotalCount % PageSize == 0)
           {
               TotalPage = TotalCount / PageSize;
           }
           else
           {
               TotalPage = TotalCount / PageSize + 1;
           }

first.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
           pre.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
           next.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
           last.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));

if (done == "first")
           {
               CurrentPage = 1;
           }
           else if (done == "last")
           {
               CurrentPage = TotalPage;
               next.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               last.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
           }
           else if (done == "pre")
           {
               if (CurrentPage > 1)
                   CurrentPage -= 1;
               else
               {
                   first.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
                   pre.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               }
           }
           else if (done == "next")
           {
               if (CurrentPage < TotalPage)
                   CurrentPage += 1;
               else
               {
                   next.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
                   last.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               }
           }

if (TotalPage == 1)
           {
               first.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               pre.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               next.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
               last.Foreground = new SolidColorBrush(Color.FromArgb(255, 178, 187, 190));
           }

pageShow.Text = CurrentPage + "/" + TotalPage;
           List<ErrorCodeDetailBind> query = DetailList.Take(CurrentPage * PageSize).Skip((CurrentPage - 1) * PageSize).ToList();
           ErrorCodeGrid.ItemsSource = query;
       }