MainWindow.xaml.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. using System.IO;
  2. using System.Reflection;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Media.Imaging;
  6. using Microsoft.Win32;
  7. namespace ArchivesCenter3
  8. {
  9. /// <summary>
  10. /// Interaction logic for MainWindow.xaml
  11. /// </summary>
  12. public partial class MainWindow : Window
  13. {
  14. public MainWindow()
  15. {
  16. InitializeComponent();
  17. updateinfo();
  18. LoadFileContent();
  19. Version version = Assembly.GetExecutingAssembly().GetName().Version;
  20. versionTextBlock.Text = $"版本号:{version.Major}.{version.Minor}.{version.Build}";
  21. }
  22. private List<string> lines; // 存储文件内容的列表
  23. private int currentIndex = -1; // 当前行索引
  24. private bool isNewRecord = false; // 标记是否是新建记录
  25. private void updateinfo()
  26. {
  27. welcomeText.Text = "欢迎!" + Settings1.Default.Username + " ";
  28. WelcomeTitle.Text = Settings1.Default.WelcomeTitle;
  29. DatabaseName.Text = Settings1.Default.DatabaseName;
  30. DatabaseSubtitle.Text = Settings1.Default.DatabaseSubtitle;
  31. UsernameCu.Text = Settings1.Default.Username;
  32. WelcomeTitleCu.Text = Settings1.Default.WelcomeTitle;
  33. DatabaseNameCu.Text = Settings1.Default.DatabaseName;
  34. DatabaseSubtitleCu.Text = Settings1.Default.DatabaseSubtitle;
  35. PasswordCu.Text = Settings1.Default.Password;
  36. DatabaseNameBox.Text = null;
  37. DatabaseSubtitleBox.Text = null;
  38. WelcomeTitleBox.Text = null;
  39. UsernameBox.Text = null;
  40. PasswordBox.Text = null;
  41. }
  42. private void Button_Click(object sender, RoutedEventArgs e)
  43. {
  44. if (!string.IsNullOrEmpty(DatabaseNameBox.Text))
  45. Settings1.Default.DatabaseName = DatabaseNameBox.Text;
  46. if (!string.IsNullOrEmpty(DatabaseSubtitleBox.Text))
  47. Settings1.Default.DatabaseSubtitle = DatabaseSubtitleBox.Text;
  48. if (!string.IsNullOrEmpty(WelcomeTitleBox.Text))
  49. Settings1.Default.WelcomeTitle = WelcomeTitleBox.Text;
  50. if (!string.IsNullOrEmpty(UsernameBox.Text))
  51. Settings1.Default.Username = UsernameBox.Text;
  52. if (!string.IsNullOrEmpty(PasswordBox.Text))
  53. Settings1.Default.Password = PasswordBox.Text;
  54. Settings1.Default.Save();
  55. updateinfo();
  56. }
  57. private void TextChanged(object sender, TextChangedEventArgs e)
  58. {
  59. bool allTextBoxesEmpty = string.IsNullOrWhiteSpace(DatabaseNameBox.Text) &&
  60. string.IsNullOrWhiteSpace(DatabaseSubtitleBox.Text) &&
  61. string.IsNullOrWhiteSpace(WelcomeTitleBox.Text) &&
  62. string.IsNullOrWhiteSpace(UsernameBox.Text) &&
  63. string.IsNullOrWhiteSpace(PasswordBox.Text);
  64. settingSaveButton0.IsEnabled = !allTextBoxesEmpty;
  65. settingSaveButton1.IsEnabled = !allTextBoxesEmpty;
  66. }
  67. private void LoadFileContent()
  68. {
  69. // 获取用户文档文件夹路径
  70. string userDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  71. // 构建目标文件路径
  72. string filePath = Path.Combine(userDocumentsPath, "ArchivesCenter", "data", "people", "content.txt");
  73. // 检查文件是否存在
  74. if (File.Exists(filePath))
  75. {
  76. // 读取文件内容
  77. lines = File.ReadAllLines(filePath).ToList();
  78. var people = new List<Person>();
  79. foreach (var line in lines)
  80. {
  81. string[] parts = line.Split(new string[] { "**" }, StringSplitOptions.None);
  82. if (parts.Length > 26) // 确保有数据且排除图片路径
  83. {
  84. people.Add(new Person
  85. {
  86. Name = parts.Length > 0 ? parts[0] : string.Empty,
  87. Gender = parts.Length > 1 ? parts[1] : string.Empty,
  88. BirthDate = parts.Length > 2 ? parts[2] : string.Empty,
  89. Level = parts.Length > 3 ? parts[3] : string.Empty,
  90. Tag = parts.Length > 4 ? parts[4] : string.Empty,
  91. IDType = parts.Length > 5 ? parts[5] : string.Empty,
  92. IDNumber = parts.Length > 6 ? parts[6] : string.Empty,
  93. Birthplace = parts.Length > 7 ? parts[7] : string.Empty,
  94. PoliticalStatus = parts.Length > 8 ? parts[8] : string.Empty,
  95. MaritalStatus = parts.Length > 9 ? parts[9] : string.Empty,
  96. Address = parts.Length > 10 ? parts[10] : string.Empty,
  97. FamilySituation = parts.Length > 11 ? parts[11] : string.Empty,
  98. AcquaintancePlace = parts.Length > 12 ? parts[12] : string.Empty,
  99. RelativeStatus = parts.Length > 13 ? parts[13] : string.Empty,
  100. Education = parts.Length > 14 ? parts[14] : string.Empty,
  101. PrimarySchool = parts.Length > 15 ? parts[15] : string.Empty,
  102. JuniorHighSchool = parts.Length > 16 ? parts[16] : string.Empty,
  103. HighSchool = parts.Length > 17 ? parts[17] : string.Empty,
  104. University = parts.Length > 18 ? parts[18] : string.Empty,
  105. GraduateSchool = parts.Length > 19 ? parts[19] : string.Empty,
  106. WorkUnit = parts.Length > 20 ? parts[20] : string.Empty,
  107. PhoneNumber = parts.Length > 21 ? parts[21] : string.Empty,
  108. Email = parts.Length > 22 ? parts[22] : string.Empty,
  109. WeChat = parts.Length > 23 ? parts[23] : string.Empty,
  110. QQ = parts.Length > 24 ? parts[24] : string.Empty,
  111. OtherContact = parts.Length > 25 ? parts[25] : string.Empty
  112. });
  113. }
  114. }
  115. // 绑定数据到 DataGrid
  116. dataGrid.ItemsSource = people;
  117. }
  118. else
  119. {
  120. lines = new List<string>();
  121. dataGrid.ItemsSource = new List<Person>();
  122. }
  123. }
  124. private void DisplayCurrentLine()
  125. {
  126. if (currentIndex >= 0 && currentIndex < lines.Count)
  127. {
  128. string[] parts = lines[currentIndex].Split(new string[] { "**" }, StringSplitOptions.None);
  129. txtName.Text = parts.Length > 0 ? parts[0] : string.Empty;
  130. cmbGender.SelectedItem = GetComboBoxItem(cmbGender, parts.Length > 1 ? parts[1] : null);
  131. dpBirthDate.SelectedDate = parts.Length > 2 ? DateTime.Parse(parts[2]) : (DateTime?)null;
  132. cmbLevel.SelectedItem = GetComboBoxItem(cmbLevel, parts.Length > 3 ? parts[3] : null);
  133. cmbTag.SelectedItem = GetComboBoxItem(cmbTag, parts.Length > 4 ? parts[4] : null);
  134. cmbIDType.SelectedItem = GetComboBoxItem(cmbIDType, parts.Length > 5 ? parts[5] : null);
  135. txtIDNumber.Text = parts.Length > 6 ? parts[6] : string.Empty;
  136. cmbBirthplace.SelectedItem = GetComboBoxItem(cmbBirthplace, parts.Length > 7 ? parts[7] : null);
  137. cmbPoliticalStatus.SelectedItem = GetComboBoxItem(cmbPoliticalStatus, parts.Length > 8 ? parts[8] : null);
  138. cmbMaritalStatus.SelectedItem = GetComboBoxItem(cmbMaritalStatus, parts.Length > 9 ? parts[9] : null);
  139. txtAddress.Text = parts.Length > 10 ? parts[10] : string.Empty;
  140. txtFamilySituation.Text = parts.Length > 11 ? parts[11] : string.Empty;
  141. txtAcquaintancePlace.Text = parts.Length > 12 ? parts[12] : string.Empty;
  142. cmbRelativeStatus.SelectedItem = GetComboBoxItem(cmbRelativeStatus, parts.Length > 13 ? parts[13] : null);
  143. cmbEducation.SelectedItem = GetComboBoxItem(cmbEducation, parts.Length > 14 ? parts[14] : string.Empty);
  144. txtPrimarySchool.Text = parts.Length > 15 ? parts[15] : string.Empty;
  145. txtJuniorHighSchool.Text = parts.Length > 16 ? parts[16] : string.Empty;
  146. txtHighSchool.Text = parts.Length > 17 ? parts[17] : string.Empty;
  147. txtUniversity.Text = parts.Length > 18 ? parts[18] : string.Empty;
  148. txtGraduateSchool.Text = parts.Length > 19 ? parts[19] : string.Empty;
  149. txtWorkUnit.Text = parts.Length > 20 ? parts[20] : string.Empty;
  150. txtPhoneNumber.Text = parts.Length > 21 ? parts[21] : string.Empty;
  151. txtEmail.Text = parts.Length > 22 ? parts[22] : string.Empty;
  152. txtWeChat.Text = parts.Length > 23 ? parts[23] : string.Empty;
  153. txtQQ.Text = parts.Length > 24 ? parts[24] : string.Empty;
  154. txtOtherContact.Text = parts.Length > 25 ? parts[25] : string.Empty;
  155. // 更新图片显示控件
  156. if (parts.Length > 26 && !string.IsNullOrEmpty(parts[26]))
  157. {
  158. try
  159. {
  160. BitmapImage bitmap = new BitmapImage();
  161. bitmap.BeginInit();
  162. bitmap.UriSource = new Uri(parts[26], UriKind.Absolute);
  163. bitmap.EndInit();
  164. imgPhoto.Source = bitmap;
  165. }
  166. catch
  167. {
  168. // 如果图片路径无效,清空图片控件
  169. imgPhoto.Source = null;
  170. }
  171. }
  172. else
  173. {
  174. // 如果没有图片路径,清空图片控件
  175. imgPhoto.Source = null;
  176. }
  177. }
  178. else
  179. {
  180. ClearControls();
  181. }
  182. }
  183. private void ClearControls()
  184. {
  185. txtName.Clear();
  186. cmbGender.SelectedItem = null;
  187. dpBirthDate.SelectedDate = new DateTime(1900, 1, 1); // 设置默认日期为 1900-01-01
  188. dpBirthDate.Text = "1900/1/1";
  189. cmbLevel.SelectedItem = null;
  190. cmbTag.SelectedItem = null;
  191. cmbIDType.SelectedItem = null;
  192. txtIDNumber.Clear();
  193. cmbBirthplace.SelectedItem = null;
  194. cmbPoliticalStatus.SelectedItem = null;
  195. cmbMaritalStatus.SelectedItem = null;
  196. txtAddress.Clear();
  197. txtFamilySituation.Clear();
  198. txtAcquaintancePlace.Clear();
  199. cmbRelativeStatus.SelectedItem = null;
  200. cmbEducation.SelectedItem = null;
  201. txtPrimarySchool.Clear();
  202. txtJuniorHighSchool.Clear();
  203. txtHighSchool.Clear();
  204. txtUniversity.Clear();
  205. txtGraduateSchool.Clear();
  206. txtWorkUnit.Clear();
  207. txtPhoneNumber.Clear();
  208. txtEmail.Clear();
  209. txtWeChat.Clear();
  210. txtQQ.Clear();
  211. txtOtherContact.Clear();
  212. imgPhoto.Source = null;
  213. }
  214. private object GetComboBoxItem(ComboBox comboBox, string content)
  215. {
  216. if (string.IsNullOrEmpty(content)) return null;
  217. foreach (var item in comboBox.Items)
  218. {
  219. if (item.ToString() == content)
  220. {
  221. return item;
  222. }
  223. }
  224. return null;
  225. }
  226. private void PreviousButton_Click(object sender, RoutedEventArgs e)
  227. {
  228. if (currentIndex > 0)
  229. {
  230. currentIndex--;
  231. DisplayCurrentLine();
  232. }
  233. }
  234. private void NextButton_Click(object sender, RoutedEventArgs e)
  235. {
  236. if (currentIndex < lines.Count - 1)
  237. {
  238. currentIndex++;
  239. DisplayCurrentLine();
  240. }
  241. }
  242. private void SaveButton_Click(object sender, RoutedEventArgs e)
  243. {
  244. // 获取所有控件的值
  245. string name = txtName.Text;
  246. string gender = cmbGender.SelectedItem?.ToString();
  247. string birthDate = dpBirthDate.SelectedDate?.ToString("yyyy-MM-dd") ?? string.Empty;
  248. string level = cmbLevel.SelectedItem?.ToString();
  249. string tag = cmbTag.SelectedItem?.ToString();
  250. string idType = cmbIDType.SelectedItem?.ToString();
  251. string idNumber = txtIDNumber.Text;
  252. string birthplace = cmbBirthplace.SelectedItem?.ToString();
  253. string politicalStatus = cmbPoliticalStatus.SelectedItem?.ToString();
  254. string maritalStatus = cmbMaritalStatus.SelectedItem?.ToString();
  255. string address = txtAddress.Text;
  256. string familySituation = txtFamilySituation.Text;
  257. string acquaintancePlace = txtAcquaintancePlace.Text;
  258. string relativeStatus = cmbRelativeStatus.SelectedItem?.ToString();
  259. string education = cmbEducation.SelectedItem?.ToString();
  260. string primarySchool = txtPrimarySchool.Text;
  261. string juniorHighSchool = txtJuniorHighSchool.Text;
  262. string highSchool = txtHighSchool.Text;
  263. string university = txtUniversity.Text;
  264. string graduateSchool = txtGraduateSchool.Text;
  265. string workUnit = txtWorkUnit.Text;
  266. string phoneNumber = txtPhoneNumber.Text;
  267. string email = txtEmail.Text;
  268. string weChat = txtWeChat.Text;
  269. string qq = txtQQ.Text;
  270. string otherContact = txtOtherContact.Text;
  271. string photoPath = imgPhoto.Source?.ToString() ?? string.Empty;
  272. // 构建保存的内容,使用两个星号 ** 分割每一列
  273. string content = string.Join("**", new string[]
  274. {
  275. name, gender, birthDate, level, tag, idType, idNumber, birthplace,
  276. politicalStatus, maritalStatus, address, familySituation, acquaintancePlace,
  277. relativeStatus, education, primarySchool, juniorHighSchool, highSchool,
  278. university, graduateSchool, workUnit, phoneNumber, email, weChat, qq, otherContact, photoPath
  279. });
  280. // 获取用户文档文件夹路径
  281. string userDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  282. // 构建目标文件路径
  283. string filePath = Path.Combine(userDocumentsPath, "ArchivesCenter", "data", "people", "content.txt");
  284. // 确保目标文件夹存在
  285. string directoryPath = Path.GetDirectoryName(filePath);
  286. if (!Directory.Exists(directoryPath))
  287. {
  288. Directory.CreateDirectory(directoryPath);
  289. }
  290. if (currentIndex >= 0 && currentIndex < lines.Count)
  291. {
  292. // 修改当前行的内容
  293. lines[currentIndex] = content;
  294. }
  295. else
  296. {
  297. // 新增一行
  298. lines.Add(content);
  299. }
  300. // 保存文件内容
  301. File.WriteAllLines(filePath, lines);
  302. // 更新 DataGrid
  303. LoadFileContent();
  304. MessageBox.Show("保存成功!", "Archives Center", MessageBoxButton.OK, MessageBoxImage.Information);
  305. }
  306. private void NewButton_Click(object sender, RoutedEventArgs e)
  307. {
  308. // 清空所有控件的内容
  309. ClearControls();
  310. // 如果是第一次点击新建按钮,添加一个空行
  311. if (!isNewRecord)
  312. {
  313. lines.Add(string.Empty);
  314. isNewRecord = true;
  315. }
  316. // 设置当前索引为最后一行
  317. currentIndex = lines.Count - 1;
  318. // 显示新行
  319. DisplayCurrentLine();
  320. }
  321. private void ChangePhotoButton_Click(object sender, RoutedEventArgs e)
  322. {
  323. OpenFileDialog openFileDialog = new OpenFileDialog
  324. {
  325. Filter = "Image Files (*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png"
  326. };
  327. if (openFileDialog.ShowDialog() == true)
  328. {
  329. // 获取用户文档文件夹路径
  330. string userDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  331. // 构建目标文件夹路径
  332. string targetDirectory = Path.Combine(userDocumentsPath, "ArchivesCenter", "data", "people");
  333. // 确保目标文件夹存在
  334. if (!Directory.Exists(targetDirectory))
  335. {
  336. Directory.CreateDirectory(targetDirectory);
  337. }
  338. // 生成随机文件名
  339. string randomFileName = Guid.NewGuid().ToString() + Path.GetExtension(openFileDialog.FileName);
  340. string targetFilePath = Path.Combine(targetDirectory, randomFileName);
  341. // 复制文件到目标路径
  342. File.Copy(openFileDialog.FileName, targetFilePath, true);
  343. // 更新图片显示控件
  344. BitmapImage bitmap = new BitmapImage();
  345. bitmap.BeginInit();
  346. bitmap.UriSource = new Uri(targetFilePath, UriKind.Absolute);
  347. bitmap.EndInit();
  348. imgPhoto.Source = bitmap;
  349. // 如果当前行存在,更新文件路径到 content.txt 文件
  350. if (currentIndex >= 0 && currentIndex < lines.Count)
  351. {
  352. string[] parts = lines[currentIndex].Split(new string[] { "**" }, StringSplitOptions.None);
  353. if (parts.Length > 26)
  354. {
  355. parts[26] = targetFilePath;
  356. }
  357. else
  358. {
  359. parts = parts.Concat(new string[] { targetFilePath }).ToArray();
  360. }
  361. lines[currentIndex] = string.Join("**", parts);
  362. SaveFileContent();
  363. }
  364. }
  365. }
  366. private void SaveFileContent()
  367. {
  368. // 获取用户文档文件夹路径
  369. string userDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  370. // 构建目标文件路径
  371. string filePath = Path.Combine(userDocumentsPath, "ArchivesCenter", "data", "people", "content.txt");
  372. // 确保目标文件夹存在
  373. string directoryPath = Path.GetDirectoryName(filePath);
  374. if (!Directory.Exists(directoryPath))
  375. {
  376. Directory.CreateDirectory(directoryPath);
  377. }
  378. // 保存文件内容
  379. File.WriteAllLines(filePath, lines);
  380. }
  381. private void DeleteButton_Click(object sender, RoutedEventArgs e)
  382. {
  383. if (currentIndex >= 0 && currentIndex < lines.Count)
  384. {
  385. // 弹出确认对话框
  386. MessageBoxResult result = MessageBox.Show("确定要删除当前记录吗?", "Archives Center", MessageBoxButton.YesNo, MessageBoxImage.Question);
  387. if (result == MessageBoxResult.Yes)
  388. {
  389. // 如果当前处于编辑状态,删除当前行
  390. lines.RemoveAt(currentIndex);
  391. // 保存文件内容
  392. SaveFileContent();
  393. // 如果删除后还有行,显示上一行的内容
  394. if (currentIndex > 0)
  395. {
  396. currentIndex--;
  397. DisplayCurrentLine();
  398. }
  399. else
  400. {
  401. ClearControls();
  402. }
  403. LoadFileContent();
  404. }
  405. }
  406. else
  407. {
  408. // 如果当前处于新建状态,清空控件内容
  409. ClearControls();
  410. }
  411. }
  412. private void pSearchButton_Click(object sender, RoutedEventArgs e)
  413. {
  414. string searchContent = pSearchBox.Text.Trim(); // 获取搜索框中的内容
  415. if (string.IsNullOrEmpty(searchContent))
  416. {
  417. MessageBox.Show("请输入搜索内容!");
  418. return;
  419. }
  420. // 获取用户文档文件夹路径
  421. string userDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  422. // 构建目标文件路径
  423. string filePath = Path.Combine(userDocumentsPath, "ArchivesCenter", "data", "people", "content.txt");
  424. if (File.Exists(filePath))
  425. {
  426. List<Person> searchResults = new List<Person>();
  427. string[] lines = File.ReadAllLines(filePath);
  428. foreach (var line in lines)
  429. {
  430. string[] parts = line.Split(new string[] { "**" }, StringSplitOptions.None);
  431. if (parts.Length > 26) // 确保有数据且排除图片路径
  432. {
  433. // 检查每一列是否包含搜索内容
  434. if (parts.Any(part => part.Contains(searchContent)))
  435. {
  436. searchResults.Add(new Person
  437. {
  438. Name = parts.Length > 0 ? parts[0] : string.Empty,
  439. Gender = parts.Length > 1 ? parts[1] : string.Empty,
  440. BirthDate = parts.Length > 2 ? parts[2] : string.Empty,
  441. Level = parts.Length > 3 ? parts[3] : string.Empty,
  442. Tag = parts.Length > 4 ? parts[4] : string.Empty,
  443. IDType = parts.Length > 5 ? parts[5] : string.Empty,
  444. IDNumber = parts.Length > 6 ? parts[6] : string.Empty,
  445. Birthplace = parts.Length > 7 ? parts[7] : string.Empty,
  446. PoliticalStatus = parts.Length > 8 ? parts[8] : string.Empty,
  447. MaritalStatus = parts.Length > 9 ? parts[9] : string.Empty,
  448. Address = parts.Length > 10 ? parts[10] : string.Empty,
  449. FamilySituation = parts.Length > 11 ? parts[11] : string.Empty,
  450. AcquaintancePlace = parts.Length > 12 ? parts[12] : string.Empty,
  451. RelativeStatus = parts.Length > 13 ? parts[13] : string.Empty,
  452. Education = parts.Length > 14 ? parts[14] : string.Empty,
  453. PrimarySchool = parts.Length > 15 ? parts[15] : string.Empty,
  454. JuniorHighSchool = parts.Length > 16 ? parts[16] : string.Empty,
  455. HighSchool = parts.Length > 17 ? parts[17] : string.Empty,
  456. University = parts.Length > 18 ? parts[18] : string.Empty,
  457. GraduateSchool = parts.Length > 19 ? parts[19] : string.Empty,
  458. WorkUnit = parts.Length > 20 ? parts[20] : string.Empty,
  459. PhoneNumber = parts.Length > 21 ? parts[21] : string.Empty,
  460. Email = parts.Length > 22 ? parts[22] : string.Empty,
  461. WeChat = parts.Length > 23 ? parts[23] : string.Empty,
  462. QQ = parts.Length > 24 ? parts[24] : string.Empty,
  463. OtherContact = parts.Length > 25 ? parts[25] : string.Empty
  464. });
  465. }
  466. }
  467. }
  468. // 绑定搜索结果到 DataGrid
  469. pSearchdataGrid.ItemsSource = searchResults;
  470. }
  471. else
  472. {
  473. MessageBox.Show("未找到数据文件!");
  474. }
  475. }
  476. }
  477. }