欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF学习笔记(1):DataGrid单元格实现逐键过滤功能

程序员文章站 2022-05-14 10:05:07
最近,开始学习WPF,其UI设计完全颠覆了传统的设计理念,为程序员提供了极大的*发挥空间,让我为之惊叹,且为之着迷。然而,WPF在国内的热度却并不高,大部分贴子都是2012年以前的,出版的图书也很少,参考的资料不多。为了避免在以后的编程中少走弯路,也防止自己遗忘,在此记录学习过程遇到的一些问题和感 ......

    最近,开始学习wpf,其ui设计完全颠覆了传统的设计理念,为程序员提供了极大的*发挥空间,让我为之惊叹,且为之着迷。然而,wpf在国内的热度却并不高,大部分贴子都是2012年以前的,出版的图书也很少,参考的资料不多。为了避免在以后的编程中少走弯路,也防止自己遗忘,在此记录学习过程遇到的一些问题和感悟。

        问题:在一个表格中录入数据,当在某列单元格中录入时,弹出一个提示框,并根据录入字符进行逐键过滤。效果如下图:

WPF学习笔记(1):DataGrid单元格实现逐键过滤功能

    首先想到是用textchanged事件进行处理,但是发现datagrid只有celleditending事件,没有textchanged事件,这样,则只能在整个单元格录入完毕后才能触发事件,不能做到根据录入字符逐键触发。

   后来,采用自定义列,加入textbox,利用textbox的textchanged事件顺利解决。 

 

WPF学习笔记(1):DataGrid单元格实现逐键过滤功能
 1 <datagrid name="dgvoucher" 
 2                   canuseraddrows="false" 
 3                   autogeneratecolumns="false" 
 4                   rowheight="25" beginningedit="">
 5             <datagrid.columns>
 6                 <datagridtextcolumn header="凭证号" binding="{binding path=fvchnum}"/>
 7                 <datagridtextcolumn header="月" binding="{binding path=fperiod}"/>
 8                 <datagridtextcolumn header="日" binding="{binding path=fday}"/>
 9                 <datagridtextcolumn header="摘要" binding="{binding path=fexp}"/>
10                 <datagridtemplatecolumn header="会计科目" width="200">
11                     <datagridtemplatecolumn.celltemplate>
12                         <datatemplate>
13                             <textbox name="txtacctname" text="{binding ffullname}" textchanged="txtacctname_textchanged" borderthickness="0"/>
14                         </datatemplate>
15                     </datagridtemplatecolumn.celltemplate>
16                 </datagridtemplatecolumn>
17                 <datagridtextcolumn header="借方金额" binding="{binding path=fdebit}"/>
18                 <datagridtextcolumn header="贷方金额" binding="{binding path=fcredit}"/>
19             </datagrid.columns>
20         </datagrid>
xaml code