博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在WPF下整一个会分页的DataGrid(二)
阅读量:7086 次
发布时间:2019-06-28

本文共 11066 字,大约阅读时间需要 36 分钟。

hot3.png

搜索和展示都没什么可说的吧,很基础的东西~其实在listbox里点了按钮进行翻页也不难啦。。但还是写在这里记录一下吧,希望对小小白起到帮助哦

代码里的注释还算清楚,语句也没有复杂的地方,所以就直接贴代码吧   

///     /// customDataPage.xaml 的交互逻辑    ///     public partial class customDataPage : UserControl, INotifyPropertyChanged    {        private DataTable _dataGridItemsSource = new DataTable();        ///         /// DataGrid的数据源        ///         public DataTable DataGridItemsSource        {            get { return _dataGridItemsSource; }            set            {                 _dataGridItemsSource = value;                ChangeDataGridItemsSource();            }        }        public static readonly DependencyProperty NumbersPerPageProperty =            DependencyProperty.Register("NumbersPerPage",            typeof(int), typeof(customDataPage), new FrameworkPropertyMetadata(10, null));        ///         /// 每页显示的最大条数        ///         public int NumbersPerPage        {            get            {                return (int)this.GetValue(NumbersPerPageProperty);            }            set            {                this.SetValue(NumbersPerPageProperty, value);            }        }        public static readonly RoutedEvent SelectionChangedEvent =            EventManager.RegisterRoutedEvent("SelectionChanged",            RoutingStrategy.Bubble,            typeof(RoutedPropertyChangedEventHandler),            typeof(customDataPage));        public event RoutedPropertyChangedEventHandler SelectionChanged        {            add            {                this.AddHandler(SelectionChangedEvent, value);            }            remove            {                this.RemoveHandler(SelectionChangedEvent, value);            }        }        public void OnSelectionChanged(object oldValue, object newValue)        {            RoutedPropertyChangedEventArgs arg =                new RoutedPropertyChangedEventArgs                    (oldValue, newValue, SelectionChangedEvent);            this.RaiseEvent(arg);        }                public event PropertyChangedEventHandler PropertyChanged;        public void OnPropertyChanged(string propertyName)        {            if (PropertyChanged != null)                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));        }        /// 当前页码        private int _currentPage = 1;        public int CurrentPage        {            get { return _currentPage; }            set            {                _currentPage = value;                //数值改变时通知前台                OnPropertyChanged("CurrentPage");            }        }        /// 总页数        private int _totalPages = 1;        public int TotalPages        {            get { return _totalPages; }            set            {                _totalPages = value;                //数值改变时通知前台                OnPropertyChanged("TotalPages");            }        }        private DataTable currentDataTable = new DataTable();        public customDataPage()        {            InitializeComponent();        }        private void LayoutRoot_Loaded_1(object sender, RoutedEventArgs e)        {            this.tbIndex.DataContext = this;            this.tbTotal.DataContext = this;            //SetDatatable();            currentDataTable = DataGridItemsSource;            if ((DataGridItemsSource != null) && (DataGridItemsSource.Rows.Count != 0))            {                SetDataGrid(currentDataTable);                TotalPages = DataGridItemsSource.Rows.Count / NumbersPerPage;                if (DataGridItemsSource.Rows.Count % NumbersPerPage != 0)                    TotalPages++;                if (TotalPages > 1)                {                    SetPageButtons();                }                DisplayPageInfo();            }            else            {                //无数据时清空 add by yxd 0503                dg.ItemsSource = null;                TotalPages = 1;                SetPageButtons();            }            dg.AddHandler(DataGrid.SelectionChangedEvent, new RoutedEventHandler(OnSelectionChanged), true);        }        ///         /// 设置DataGrid要显示的数据        ///         private void SetDataGrid(DataTable currentTable)        {            dg.ItemsSource = null;            int restNums = 0;            if (currentDataTable.Rows.Count - NumbersPerPage * (CurrentPage - 1) < NumbersPerPage)                restNums = currentDataTable.Rows.Count;            else                restNums = NumbersPerPage * CurrentPage;            if (currentTable.Rows.Count >= NumbersPerPage)            {                DataTable tempTable = new DataTable();                tempTable = currentTable.Clone();                for (int i = NumbersPerPage * (CurrentPage - 1);                    i < restNums;                    i++)                {                    tempTable.ImportRow(currentTable.Rows[i]);                }                dg.ItemsSource = tempTable.DefaultView;                tempTable.Dispose();            }            else                dg.ItemsSource = currentTable.DefaultView;        }        ///         /// 设置显示页数的按钮        ///         private void SetPageButtons()        {            List
lstPage = new List
();            for (int i = 0; i < TotalPages; i++)            {                lstPage.Add(i + 1);            }            lbPageNumbers.ItemsSource = lstPage;        }        ///
        /// 控制各按钮是否可用        ///         private void DisplayPageInfo()        {            if (DataGridItemsSource.Rows.Count <= NumbersPerPage                || DataGridItemsSource == null)            {                btnPrev.IsEnabled = false;                btnNext.IsEnabled = false;                btnGo.IsEnabled = false;                tbGoNum.IsEnabled = false;                return;            }            if (CurrentPage == 1)                btnPrev.IsEnabled = false;            else                btnPrev.IsEnabled = true;            if (CurrentPage == TotalPages)                btnNext.IsEnabled = false;            else                btnNext.IsEnabled = true;        }        ///
        /// 上一页        ///         ///
        ///
        private void btnPrev_Click_1(object sender, RoutedEventArgs e)        {            CurrentPage--;            SetDataGrid(currentDataTable);            DisplayPageInfo();        }        ///
        /// 下一页        ///         ///
        ///
        private void btnNext_Click_1(object sender, RoutedEventArgs e)        {            CurrentPage++;            SetDataGrid(currentDataTable);            DisplayPageInfo();        }        ///
        /// 跳转        ///         ///
        ///
        private void btnGo_Click_1(object sender, RoutedEventArgs e)        {            Button btn = sender as Button;            CurrentPage = int.Parse(tbGoNum.Text.Trim());            SetDataGrid(currentDataTable);            DisplayPageInfo();            tbGoNum.Text = string.Empty;            btnGo.IsEnabled = false;        }        ///
        /// 跳转到第几页,文本变化时控制跳转按钮的可用状态        ///         ///
        ///
        private void tbGoNum_TextChanged_1(object sender, TextChangedEventArgs e)        {            int pageNum = 0;            if (int.TryParse(tbGoNum.Text.Trim(), out pageNum))            {                if (pageNum <= TotalPages)                    btnGo.IsEnabled = true;            }            else                return;        }        private void SetDatatable()        {            DataGridItemsSource.Columns.Add("dh", typeof(string));            DataGridItemsSource.Columns.Add("zh", typeof(string));            for (int i = 0; i < 99; i++)            {                DataRow dr = DataGridItemsSource.NewRow();                dr["dh"] = "00" + i.ToString();                dr["zh"] = "123" + i.ToString();                DataGridItemsSource.Rows.Add(dr);            }        }        ///
        /// 搜索按钮        ///         ///
        ///
        private void btnSearch_Click_1(object sender, RoutedEventArgs e)        {            if (string.IsNullOrEmpty(tbZh.Text.Trim()))                return;            DataTable temp = new DataTable();            temp = (dg.ItemsSource as DataView).Table.Clone();            DataRow[] rows = DataGridItemsSource.Select("Bind_BH='" + tbZh.Text.Trim() + "'");            if (rows.Count() != 0)            {                for (int i = 0; i < rows.Count(); i++)                {                    temp.ImportRow(rows[i]);                }                currentDataTable = temp;                SetDataGrid(currentDataTable);            }            DisplayPageInfo();        }        ///
        /// 获取全部按钮        ///         ///
        ///
        private void btnCheckAll_Click_1(object sender, RoutedEventArgs e)        {            currentDataTable = DataGridItemsSource;            SetDataGrid(currentDataTable);            DisplayPageInfo();        }        int prevIndex = 0;        ///
        /// 点击页数        ///         ///
        ///
        private void lbPageNumbers_SelectionChanged_1(object sender, SelectionChangedEventArgs e)        {            if (lbPageNumbers.SelectedItem == null)                return;            int currentIndex = int.Parse(lbPageNumbers.SelectedItem.ToString());            if (currentIndex > prevIndex)            {                if (currentIndex <= lbPageNumbers.Items.Count - 3)                {                    lbPageNumbers.ScrollIntoView(lbPageNumbers.Items[currentIndex + 2]);                }                else if (currentIndex <= lbPageNumbers.Items.Count - 2)                {                    lbPageNumbers.ScrollIntoView(lbPageNumbers.Items[currentIndex + 1]);                }            }            else if (currentIndex < prevIndex)            {                if (currentIndex - 2 >= 0)                {                    lbPageNumbers.ScrollIntoView(lbPageNumbers.Items[currentIndex - 2]);                }                else if (currentIndex - 1 >= 0)                {                    lbPageNumbers.ScrollIntoView(lbPageNumbers.Items[currentIndex - 1]);                }            }            CurrentPage = currentIndex + 1;            prevIndex = currentIndex;            SetDataGrid(currentDataTable);            DisplayPageInfo();        }        ///
        /// 刷新DataGrid数据源        ///         private void ChangeDataGridItemsSource()        {            currentDataTable = DataGridItemsSource;            if (DataGridItemsSource != null)            {                SetDataGrid(currentDataTable);                TotalPages = DataGridItemsSource.Rows.Count / NumbersPerPage;                if (DataGridItemsSource.Rows.Count % NumbersPerPage != 0)                    TotalPages++;                if (TotalPages > 1)                {                    SetPageButtons();                }                DisplayPageInfo();            }        }    }

 

转载于:https://my.oschina.net/darknightlotus/blog/701774

你可能感兴趣的文章
javascript 正则替换字符的新方法!
查看>>
OSGI:从面向接口编程来理解OSGI
查看>>
前端之JavaScript(1) - 浅谈JavaScript函数与栈
查看>>
WayOs 帐号到期自动清理工具,致浪费在清理到期用户的青春
查看>>
新买的mac笔记本,发现vi编辑器没有颜色的解决方案
查看>>
object-c 混编 调用C,C++接口
查看>>
JQuery Ajax实例总结
查看>>
CentOS中文件夹基本操作命令
查看>>
VS2008 Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件..."解决方案...
查看>>
js判断图片是否存在,并做处理
查看>>
windows xp 创建 Oracle(11G)数据库实例时写入系统日志失败解决方案
查看>>
菜鸟学SSH(十)——Hibernate核心接口
查看>>
转 JavaScript 实现简单的双向数据绑定
查看>>
Fiddler2汉化版使用说明
查看>>
未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序
查看>>
判断当前运行的平台
查看>>
checkbox 多选框 :jquery之全选、全不选、反选
查看>>
触摸屏
查看>>
ADO.net的学习
查看>>
AIX 中 Paging Space 使用率过高的分析与解决
查看>>