博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight 查询DataGrid 中匹配项 ,后台改变选中行颜色
阅读量:5037 次
发布时间:2019-06-12

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

需求:根据关键字(参会人号码或名称)查找参会人,在datagird 中高亮显示

界面:我在界面上增加了一个文本框和按钮,进行查找操作

操作说明:

根据关键字进行搜索:输入关键字 点击查找,如果找到 以蓝色背景显示整行数据(坑爹的项目经理非让用这个颜色,一点都不好看偷笑),找不到进行提示;继续点击查找 寻找下一个匹配项

上代码:

声明了三个变量,next 存储下一个匹配项,list 存储所有匹配项,color 为行背景色

 

ConfMemberModel next = null;List
list = new List
();Color color = new Color() { A = 255, R = 43, G = 97, B = 237 };
变量

 

搜索按钮事件代码,简单的进行了实现,还可以再优化下,达到更优效果大笑

1 private void btnSeach_Click(object sender, RoutedEventArgs e) 2         { 3             string txtPhoneno = txtSeach.Text.Trim(); 4             if (txtPhoneno != "") 5             { 6                 var collection = dataGrid1.ItemsSource as ObservableCollection
; 7 8 start: if (next == null) 9 {10 next = collection.FirstOrDefault
((cmm) =>11 {12 13 if (cmm.Phoneno.Contains(txtPhoneno) || cmm.Data.Contains(txtPhoneno))14 {15 dataGrid1.SelectedItem = cmm;16 17 dataGrid1.Columns.ToList().ForEach(18 (dgc) =>19 {20 FrameworkElement fwElement = dgc.GetCellContent(cmm);21 SetRowBG(fwElement, new SolidColorBrush(color));22 }23 24 );25 return true;26 }27 28 return false;29 });30 31 if (next != null)32 {33 list.Add(next);34 }35 else36 {37 var messageBox = new cwConfirmBox();38 messageBox.Show("未找到号码" + txtPhoneno);39 return;40 }41 }42 else43 {44 next = collection.FirstOrDefault
((cmm) =>45 {46 47 if ((cmm.Phoneno.Contains(txtPhoneno) || cmm.Data.Contains(txtPhoneno)) && !list.Contains(cmm))48 {49 dataGrid1.SelectedItem = cmm;50 51 dataGrid1.Columns.ToList().ForEach(52 (dgc) =>53 {54 FrameworkElement fwElement = dgc.GetCellContent(cmm);55 SetRowBG(fwElement, new SolidColorBrush(color));56 }57 58 );59 return true;60 }61 else62 {63 dataGrid1.Columns.ToList().ForEach(64 (dgc) =>65 {66 FrameworkElement fwElement = dgc.GetCellContent(cmm);67 SetRowBG(fwElement, null);68 }69 70 );71 }72 return false;73 });74 75 if (next != null)76 {77 list.Add(next);78 }79 else80 {81 list.Clear();82 goto start;83 }84 85 }86 }87 else88 {89 var messageBox = new cwConfirmBox();90 messageBox.Show("请输入号码!");91 return;92 }93 }
按钮事件
1         ///  2         /// 设置行背景 3         ///  4         ///  5         void SetRowBG(FrameworkElement fwElement, Brush brush) 6         { 7             DependencyObject dpObject = VisualTreeHelper.GetParent(fwElement); 8  9             if (dpObject.GetType() == typeof(Grid))10             {11                 var grid = dpObject as Grid;12 13                 grid.Background = brush;14 15                 return;16             }17             else18             {19                 SetRowBG(dpObject as FrameworkElement, brush);20             }21 22         }
设置背景

原理很简单,就是把所有列的背景进行了改变,此方法对列较少的datagird还行,多了也没测试,不知道性能会有多大影响水平有限,暂时想到的这样操作,希望有大牛能够指点下。大笑

 

 

 

转载于:https://www.cnblogs.com/CLR010/p/3263068.html

你可能感兴趣的文章
SQL 完美解决用逗号分隔存放在一个字段数据
查看>>
励志人生。成功基本的十个方法 转自百度文库
查看>>
UCOS-信号标志组(学习笔记)
查看>>
Jrebel实现Jetty 热部署
查看>>
Implement Insert and Delete of Tri-nay Tree
查看>>
【java】解析java中的数组
查看>>
Java虚拟机9:垃圾收集(GC)-4(垃圾收集器)
查看>>
Github之协同开发
查看>>
python字典使用
查看>>
使用Adivisor配置增强处理
查看>>
.net 操作MongoDB 基础
查看>>
文本元素
查看>>
用定位实现机器人效果
查看>>
第八周作业
查看>>
unity 字典序列化的问题
查看>>
升级测试(Upgrade Testing)
查看>>
php 连接 memcached 并调用
查看>>
03 Python安装 - 编辑器安装
查看>>
block传值
查看>>
【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解...
查看>>