OTSDisplaySampleGrid.cs 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124
  1. using OTSDataType;
  2. using OTSMeasureApp._3_OTSDisplaySourceGridData;
  3. using OTSModelSharp.ResourceManage;
  4. using SourceGrid;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Drawing;
  9. using System.Linq;
  10. using System.Text.RegularExpressions;
  11. using System.Windows.Forms;
  12. namespace OTSMeasureApp
  13. {
  14. public class OTSDisplaySampleGrid
  15. {
  16. public OTSPropertyWindow m_PropWindow = null;
  17. int m_Grid_TotalRow = 0; // 显示样品信息的Grid的总行数
  18. //定义分栏表头样式
  19. SourceGrid.Cells.Views.Cell m_Col_HeaderMode = null;
  20. //定义大表头grid表头样式
  21. SourceGrid.Cells.Views.Cell m_CellTitleModel = null;
  22. //定义分栏标题格样式
  23. SourceGrid.Cells.Views.Cell m_Col_NameMode = null;
  24. //定义分栏内容格样式
  25. SourceGrid.Cells.Views.Cell m_Col_ValMode = null;
  26. //只读样式cell设置
  27. SourceGrid.Cells.Views.Cell M_Col_readonly = null;
  28. //响应CheckBOX的点击事件
  29. SelcetCheckBoxEvent m_SelectCheckBoxEvent = null;
  30. //当选择了Grid的某个row ,修改Row的值,引发的事件
  31. ChangeGridCellValEvent m_ChangeCellValEvent = null;
  32. //选择COMBOBOX值引发的事件
  33. SelectComboboxItem m_SeletComboboxValEvent = null;
  34. //EditFileDialog
  35. EditorFileDialog m_EditFileDlg = new EditorFileDialog();
  36. //CELL的第一例的 "-" 的事件
  37. SourceGrid.Cells.Controllers.Button m_linkClickEvent3 = null;
  38. //当Grid被Click时, 确定Click点击的行和列
  39. public int m_ClickRow = 0;
  40. public int m_ClickColumn = 0;
  41. //当改变ProperyWindow窗口大小时,窗口响应Resize(object sender, EventArgs e),返回改变后的尺寸,利用改变后的窗口尺寸重回Grid的行宽和列宽
  42. public int m_PropWindow_X = 0;
  43. public int m_PropWindow_Y = 0;
  44. // int Cur_Grid_Rows = 0; //临时用于计算用的grid行号
  45. public static int Const_Grid_Row = 49; //总行数
  46. public static int Const_Grid_Column = 3; //总列数
  47. //后台工作线程
  48. BackgroundWorker m_bgWorker = null;
  49. //后台工作线程启动标志,保证线程按顺序启动。
  50. public bool m_ReqChangeValFlag = true;
  51. //工作样品对象
  52. //OTSSampleVisualPropertyInfo m_WSampleInfo = new OTSSampleVisualPropertyInfo();
  53. NLog.Logger log ;
  54. public OTSDisplaySampleGrid(OTSPropertyWindow Propwindow)
  55. {
  56. log = NLog.LogManager.GetCurrentClassLogger();
  57. m_PropWindow = Propwindow;
  58. m_PropWindow.PropGrid.Redim(Const_Grid_Row, Const_Grid_Column);
  59. m_PropWindow.TSEdit.Enabled = false;
  60. m_PropWindow.TSLoad.Enabled = false;
  61. m_PropWindow.TSSaveAs.Enabled = false;
  62. }
  63. //隐藏Grid
  64. public void HideGrid()
  65. {
  66. m_PropWindow.PropGrid.Hide();
  67. }
  68. //初始化Grid修改值事件
  69. void IntiChangeValEvent()
  70. {
  71. m_ChangeCellValEvent = new ChangeGridCellValEvent(this);
  72. m_SeletComboboxValEvent = new SelectComboboxItem(this);
  73. m_SelectCheckBoxEvent = new SelcetCheckBoxEvent(this);
  74. //CELL的第一例的 "-" 的事件,响应点击事件
  75. m_linkClickEvent3 = new SourceGrid.Cells.Controllers.Button();
  76. m_linkClickEvent3.Executed += new EventHandler(CellLink_Click_Status);
  77. }
  78. //初始化工作线程
  79. private void InitWorkThread()
  80. {
  81. using (m_bgWorker = new BackgroundWorker())
  82. {
  83. m_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
  84. m_bgWorker.DoWork += new DoWorkEventHandler(bw_DoWork);
  85. }
  86. }
  87. //初始化Grid的标题
  88. public void InitGridTitlet()
  89. {
  90. // InitGrid();
  91. int firstColumnWidth = 15; //第一列的宽度
  92. int SecondColumnWidth = 180;
  93. //设备各单元格宽度---------------------------------------------
  94. m_PropWindow.PropGrid.Columns.SetWidth(0, firstColumnWidth); //设置第一列宽度
  95. m_PropWindow.PropGrid.Columns.AutoSizeColumn(2); //固定进度条
  96. //ProperyWindows的窗口宽度包括是第二列和第三列的长度总和
  97. m_PropWindow.PropGrid.Columns.SetWidth(1, 180); //第二列宽度
  98. m_PropWindow.PropGrid.Columns.SetWidth(2, (m_PropWindow_X - firstColumnWidth- SecondColumnWidth - 10)); //第三列宽度
  99. }
  100. public void InitGrid()
  101. {
  102. IntiChangeValEvent();
  103. //定义大表头grid表头样式
  104. {
  105. m_CellTitleModel = new SourceGrid.Cells.Views.Cell();
  106. m_CellTitleModel.BackColor = Color.LightGray;
  107. m_CellTitleModel.ForeColor = Color.Black;
  108. m_CellTitleModel.TextAlignment = DevAge.Drawing.ContentAlignment.TopLeft;
  109. }
  110. //定义分栏表头样式
  111. {
  112. m_Col_HeaderMode = new SourceGrid.Cells.Views.Cell();
  113. m_Col_HeaderMode.BackColor = Color.LightGray; //背景色
  114. m_Col_HeaderMode.ForeColor = Color.Black; //字体颜色
  115. m_Col_HeaderMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
  116. }
  117. //定义分栏标题格样式
  118. {
  119. m_Col_NameMode = new SourceGrid.Cells.Views.Cell();
  120. m_Col_NameMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
  121. }
  122. //定义分栏内容格样式
  123. {
  124. m_Col_ValMode = new SourceGrid.Cells.Views.Cell();
  125. m_Col_ValMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
  126. }
  127. //只读样式cell设置
  128. {
  129. M_Col_readonly = new SourceGrid.Cells.Views.Cell();
  130. M_Col_readonly.ForeColor = Color.Gray;
  131. }
  132. }
  133. public void ShowSampleInfoGrid(OTSSampleVisualPropertyInfo SampleInfo)
  134. {
  135. if(SampleInfo.SampleDataList.Count() == 0)
  136. {
  137. return;
  138. }
  139. m_Grid_TotalRow = 0;
  140. var grps = SampleInfo.GetSampleDataGroups();
  141. foreach (var grp in grps)
  142. {
  143. this.InitGroupTitle(m_Grid_TotalRow, grp);
  144. m_Grid_TotalRow++;
  145. //设置样品Grid数据
  146. var SampleDataList = grp.GetSampleDataList();
  147. for (int i = 0; i < SampleDataList.Count ; i++)
  148. {
  149. //显示样品的属性值
  150. CPropItem SData = SampleDataList[i];
  151. this.SetGridCellVal(m_Grid_TotalRow, SData);
  152. m_Grid_TotalRow++;
  153. }
  154. }
  155. }
  156. //初始化组的标题栏 iRow:GroupTitle的行号, sGroupName: GroupTitle的名字
  157. private void InitGroupTitle(int iRow,CPropItemGrp grp)
  158. {
  159. String sGroupName = grp.GetSTitle();
  160. if (null == m_PropWindow.PropGrid[iRow, 0])
  161. {
  162. m_PropWindow.PropGrid[iRow, 0] = new SourceGrid.Cells.Link("-");//第一行,上面用来折叠的"-",一会点击后变成"+"
  163. m_PropWindow.PropGrid[iRow, 0].View = m_CellTitleModel; //设置表头的样式
  164. //设置表头"-"按钮,点击后的事件
  165. SourceGrid.Cells.Controllers.Button linkClickEvent3 = new SourceGrid.Cells.Controllers.Button();
  166. linkClickEvent3.Executed += new EventHandler(CellLink_Click_Status);
  167. m_PropWindow.PropGrid[iRow, 0].Controller.AddController(linkClickEvent3);
  168. m_PropWindow.PropGrid[iRow, 0].RowSpan = grp.GetSampleDataList().Count+1;
  169. }
  170. if(null == m_PropWindow.PropGrid[iRow, 1])
  171. {
  172. m_PropWindow.PropGrid[iRow, 1] = new SourceGrid.Cells.Cell(sGroupName); // 设置GroupTitle的名字
  173. m_PropWindow.PropGrid[iRow, 1].View = m_CellTitleModel;
  174. m_PropWindow.PropGrid[iRow, 1].ColumnSpan = 2; //设置第二列与第三列合并,表头效果完成。 2:从当前列开始合并2列
  175. }
  176. }
  177. private void SetGridCellVal(int Row, CPropItem SData )
  178. {
  179. OTS_SAMPLE_PROP_GRID_ITEMS SampleID = SData.SampleId;
  180. String sCaptionName = SData.CaptionName;
  181. object SampleVal = SData.GetSampleVal();
  182. List<String> comboDownList = SData.comboDownList;
  183. OTS_ITEM_TYPES SampleValType = SData.SampleValType;
  184. bool bReadOnly = SData.bReadOnly;
  185. switch (SampleValType)
  186. {
  187. case OTS_ITEM_TYPES.TIME:
  188. case OTS_ITEM_TYPES.TIME_SPAN:
  189. case OTS_ITEM_TYPES.STRING:
  190. {
  191. if(OTS_ITEM_TYPES.TIME== SampleValType)
  192. {
  193. DateTime dt = DateTime.Parse ((String)SampleVal );
  194. SampleVal = dt.ToString();
  195. }
  196. if(OTS_ITEM_TYPES.TIME_SPAN== SampleValType)
  197. {
  198. TimeSpan TSpan = TimeSpan.FromSeconds(Convert .ToDouble( SampleVal));
  199. //这样就能得到天数、小时、分差
  200. string csTimeSpan = string.Empty;
  201. if (TSpan.Days > 0)
  202. {
  203. csTimeSpan += TSpan.Days + "天";
  204. }
  205. if (TSpan.Hours > 0)
  206. {
  207. csTimeSpan += TSpan.Hours + "小时";
  208. }
  209. if (TSpan.Minutes > 0)
  210. {
  211. csTimeSpan += TSpan.Minutes + "分";
  212. }
  213. if (TSpan.Seconds > 0)
  214. {
  215. csTimeSpan += TSpan.Seconds + "秒";
  216. }
  217. //所有时间换去 总计天数、小时、分钟
  218. SampleVal = csTimeSpan;
  219. }
  220. if (null == m_PropWindow.PropGrid[Row, 1])
  221. {
  222. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  223. }
  224. else
  225. {
  226. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  227. }
  228. if(SampleID == OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME)
  229. {
  230. // m_EditFileDlg
  231. if((null == m_PropWindow.PropGrid[Row, 2]) )
  232. {
  233. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell((String)SampleVal, m_EditFileDlg);
  234. }
  235. else
  236. {
  237. m_PropWindow.PropGrid[Row, 2].Value = (String)SampleVal;
  238. }
  239. //设置CELL 的显示模式
  240. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  241. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  242. if (bReadOnly) //只读模式
  243. {
  244. m_PropWindow.PropGrid[Row, 2].Editor = null;
  245. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  246. }
  247. else
  248. { //设置允许修改值的事件
  249. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  250. }
  251. if (bReadOnly) //只读模式
  252. {
  253. m_PropWindow.PropGrid[Row, 2].Editor = null;
  254. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  255. }
  256. else
  257. { //设置允许修改值的事件
  258. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  259. }
  260. }
  261. else if(SampleID == OTS_SAMPLE_PROP_GRID_ITEMS.STOP_MODE)
  262. {
  263. if (null == m_PropWindow.PropGrid[Row, 2])
  264. {
  265. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(string));
  266. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  267. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  268. if (bReadOnly) //只读模式
  269. {
  270. m_PropWindow.PropGrid[Row, 2].Editor = null;
  271. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  272. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  273. }
  274. else
  275. {
  276. //设置允许修改值的事件
  277. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  278. }
  279. }
  280. else
  281. {
  282. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  283. }
  284. }
  285. else
  286. {
  287. if (null == m_PropWindow.PropGrid[Row, 2])
  288. {
  289. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(string));
  290. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  291. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  292. if (bReadOnly) //只读模式
  293. {
  294. m_PropWindow.PropGrid[Row, 2].Editor = null;
  295. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  296. }
  297. else
  298. {
  299. //设置允许修改值的事件
  300. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  301. }
  302. }
  303. else
  304. {
  305. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  306. }
  307. }
  308. //将ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  309. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  310. //将参数类型绑定到单元格上,当在行上Click时,就可以查到对应的参数类型所在的行上的的值
  311. m_PropWindow.PropGrid[Row,2].Tag = SampleValType;
  312. }
  313. break;
  314. case OTS_ITEM_TYPES.BOOL:
  315. {
  316. if(null == m_PropWindow.PropGrid[Row, 1])
  317. {
  318. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  319. }
  320. else
  321. {
  322. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  323. }
  324. if (SampleVal.ToString() == "")
  325. {
  326. SampleVal = 0;
  327. }
  328. bool bSwitch = Convert.ToInt32(SampleVal)==1?true:false;
  329. if (null == m_PropWindow.PropGrid[Row, 2])
  330. {
  331. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.CheckBox(null, bSwitch);
  332. m_PropWindow.PropGrid[Row, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(Row);
  333. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  334. }
  335. else
  336. {
  337. m_PropWindow.PropGrid[Row, 2].Value = bSwitch;
  338. }
  339. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  340. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  341. }
  342. break;
  343. case OTS_ITEM_TYPES.COMBO:
  344. {
  345. //初始化 ComboxTest ,COMBBOX 显示文字使用
  346. SourceGrid.Cells.Editors.ComboBox m_ComboboxText = null;
  347. List<string> ValList = new List<string>();
  348. string[] arraySample;
  349. if(null == comboDownList )
  350. {
  351. List<string> sSampleVal = new List<string>();
  352. ValList = sSampleVal;
  353. }
  354. else
  355. {
  356. ValList = (List<string>)comboDownList ;
  357. }
  358. int iValCount = ValList.Count();
  359. if(iValCount>0)
  360. {
  361. arraySample = new string[iValCount];
  362. for(int i=0; i<iValCount; i++)
  363. {
  364. arraySample[i] = ValList[i];
  365. }
  366. }
  367. else
  368. {
  369. arraySample = new string[3] { "", "", "" };
  370. }
  371. if(null == m_PropWindow.PropGrid[Row, 1])
  372. {
  373. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  374. }
  375. else
  376. {
  377. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  378. }
  379. if (null == m_PropWindow.PropGrid[Row, 2])
  380. {
  381. try
  382. {
  383. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal);
  384. m_ComboboxText = new SourceGrid.Cells.Editors.ComboBox(typeof(string), arraySample, true);
  385. m_PropWindow.PropGrid[Row, 2].Editor = m_ComboboxText;
  386. m_ComboboxText.Control.DropDownStyle = ComboBoxStyle.DropDownList; //设置下拉框为不可以编辑的状态
  387. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  388. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  389. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  390. m_ComboboxText.EditableMode = EditableMode.SingleClick;
  391. }
  392. catch (Exception)
  393. {
  394. }
  395. }
  396. else
  397. {
  398. m_PropWindow.PropGrid[Row, 2].Value = (string)SampleVal ;
  399. }
  400. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  401. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  402. m_PropWindow.PropGrid[Row,2].Tag = SampleValType ;
  403. }
  404. break;
  405. case OTS_ITEM_TYPES.INT:
  406. {
  407. if(null == m_PropWindow.PropGrid[Row, 1])
  408. {
  409. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  410. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  411. }
  412. else
  413. {
  414. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  415. }
  416. if(null == m_PropWindow.PropGrid[Row, 2])
  417. {
  418. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(int));
  419. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  420. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  421. }
  422. else
  423. {
  424. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  425. }
  426. if (bReadOnly) //只读模式
  427. {
  428. m_PropWindow.PropGrid[Row, 2].Editor = null;
  429. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  430. }
  431. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  432. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  433. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  434. }
  435. break;
  436. case OTS_ITEM_TYPES.DOUBLE:
  437. {
  438. if(null == m_PropWindow.PropGrid[Row, 1])
  439. {
  440. m_PropWindow.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
  441. m_PropWindow.PropGrid[Row, 1].View = m_Col_NameMode;
  442. }
  443. else
  444. {
  445. m_PropWindow.PropGrid[Row, 1].Value = sCaptionName;
  446. }
  447. if(null == m_PropWindow.PropGrid[Row, 2])
  448. {
  449. m_PropWindow.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal, typeof(double));
  450. m_PropWindow.PropGrid[Row, 2].View = m_Col_ValMode;
  451. }
  452. else
  453. {
  454. m_PropWindow.PropGrid[Row, 2].Value = SampleVal;
  455. }
  456. if (bReadOnly) //只读模式
  457. {
  458. m_PropWindow.PropGrid[Row, 2].Editor = null;
  459. m_PropWindow.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
  460. }
  461. else
  462. { //设置允许修改值的事件
  463. m_PropWindow.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
  464. }
  465. //将样品的ID绑定到行号上,当在行上Click时,就可以查到对应的样品ID所在的行上的的值
  466. m_PropWindow.PropGrid.Rows[Row].Tag = SampleID;
  467. m_PropWindow.PropGrid[Row, 2].Tag = SampleValType;
  468. }
  469. break;
  470. default:
  471. break;
  472. }
  473. }
  474. //点击 Grid标题栏左边的 "-"或者"+" 实现隐藏和显示样品属性行
  475. private void ShowOrHideCellRow(string sLTitle,int LTitleRow,int StartRow, int EndRow)
  476. {
  477. if ("-" == sLTitle)
  478. {
  479. //隐藏
  480. for (int i = StartRow; i < EndRow; i++)
  481. {
  482. m_PropWindow.PropGrid.Rows.HideRow(i);
  483. }
  484. m_PropWindow.PropGrid[LTitleRow, 0].Value = "+";
  485. }
  486. else
  487. {
  488. //显示
  489. m_PropWindow.PropGrid[LTitleRow, 0].Value = "-";
  490. for (int i = StartRow; i < EndRow; i++)
  491. {
  492. m_PropWindow.PropGrid.Rows.ShowRow(i);
  493. }
  494. }
  495. }
  496. //响应 表头"-"按钮,点击后的事件
  497. //折叠显示grid信息使用
  498. private void CellLink_Click_Status(object sender, EventArgs e)
  499. {
  500. string sTitleName = (string)m_PropWindow.PropGrid[m_ClickRow, 1].Value;
  501. string sLinkTitle = m_PropWindow.PropGrid[m_ClickRow, 0].Value.ToString();
  502. int rowspan = m_PropWindow.PropGrid[m_ClickRow, 0].RowSpan;
  503. this.ShowOrHideCellRow(sLinkTitle, m_ClickRow, m_ClickRow + 1, m_ClickRow + rowspan );
  504. }
  505. public void SetGridTitleStatus()
  506. {
  507. if (m_PropWindow.PropGrid.Rows[m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  508. {
  509. if (OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_PARAM_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag)
  510. {
  511. m_PropWindow.TSEdit.Enabled = false;
  512. m_PropWindow.TSLoad.Enabled = true;
  513. m_PropWindow.TSSaveAs.Enabled = true;
  514. }
  515. else if (OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag)
  516. {
  517. m_PropWindow.TSEdit.Enabled = false;
  518. m_PropWindow.TSEdit.Visible = false;
  519. m_PropWindow.TSLoad.Enabled = true;
  520. m_PropWindow.TSSaveAs.Enabled = true;
  521. }
  522. else
  523. {
  524. m_PropWindow.TSEdit.Enabled = false;
  525. m_PropWindow.TSEdit.Visible = false;
  526. m_PropWindow.TSLoad.Enabled = true;
  527. m_PropWindow.TSSaveAs.Enabled = true;
  528. }
  529. }
  530. }
  531. /// <summary>
  532. /// 保存修改样品值
  533. /// </summary>
  534. struct sSampleid_Val
  535. {
  536. public OTS_SAMPLE_PROP_GRID_ITEMS SampleID;
  537. public object ObjVal;
  538. public bool bCheckBoxFlag; //bCheckBoxFlag: 当TREEVIEW的工作样品的CHECKBOS状态发生变化,bCheckBoxFlag=true;需要更新GRIDE上的SWITCH的值
  539. }
  540. /// <summary>
  541. /// MeasureAPP回复Gird修改值成功/失败
  542. /// bCheckBoxFlag: 当TREEVIEW的工作样品的CHECKBOS状态发生变化,bCheckBoxFlag=true;需要更新GRIDE上的SWITCH的值
  543. /// </summary>
  544. /// <param name="SampleID"></param>
  545. /// <param name="ObjVal"></param>
  546. /// <param name="bCheckBoxFlag"></param>
  547. public void UpdataNewGridVal(OTS_SAMPLE_PROP_GRID_ITEMS SampleID, object ObjVal, bool bCheckBoxFlag=false)
  548. {
  549. sSampleid_Val sval = new sSampleid_Val();
  550. sval.SampleID = SampleID;
  551. sval.ObjVal = ObjVal;
  552. sval.bCheckBoxFlag = bCheckBoxFlag;
  553. if (m_bgWorker != null)
  554. {
  555. if (!m_bgWorker.IsBusy)
  556. {
  557. m_ReqChangeValFlag = false;
  558. m_bgWorker.RunWorkerAsync(sval);
  559. }
  560. }
  561. }
  562. void bw_DoWork(object sender, DoWorkEventArgs e)
  563. {
  564. // 这里是后台线程, 是在另一个线程上完成的
  565. // 这里是真正做事的工作线程
  566. // 可以在这里做一些费时的,复杂的操作
  567. sSampleid_Val sVal = (sSampleid_Val)e.Argument;
  568. string str = sVal.SampleID.ToString();
  569. string sLine = m_ClickRow.ToString();
  570. str += " != Switch" + " ClickLine = " + sLine;
  571. if (sVal.SampleID != OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH)
  572. {
  573. if ((OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[m_ClickRow].Tag == sVal.SampleID)
  574. {
  575. m_PropWindow.PropGrid[m_ClickRow, m_ClickColumn].Value = sVal.ObjVal;
  576. log.Trace(" Set Value "+str);
  577. }
  578. }
  579. else
  580. {
  581. if (sVal.bCheckBoxFlag)
  582. {
  583. for(int i=0; i<m_Grid_TotalRow; i++)
  584. {
  585. if(null == m_PropWindow.PropGrid[i, 2].Tag)
  586. {
  587. continue;
  588. }
  589. if (((int)m_PropWindow.PropGrid[i, 2].Tag == i) && ((OTS_SAMPLE_PROP_GRID_ITEMS)m_PropWindow.PropGrid.Rows[i].Tag == OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH))
  590. {
  591. m_PropWindow.PropGrid[i, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged -= m_SelectCheckBoxEvent.SetCheckBoxStatus(i);
  592. bool bFlag = m_PropWindow.PropGrid.ContainsFocus;
  593. m_PropWindow.PropGrid[i, 2].Value = sVal.ObjVal;
  594. m_PropWindow.PropGrid[i, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(i);
  595. break;
  596. }
  597. }
  598. }
  599. else
  600. {
  601. m_PropWindow.PropGrid[m_ClickRow, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged -= m_SelectCheckBoxEvent.SetCheckBoxStatus(m_ClickRow);
  602. m_PropWindow.PropGrid[m_ClickRow, m_ClickColumn].Value = sVal.ObjVal;
  603. m_PropWindow.PropGrid[m_ClickRow, 2].FindController<SourceGrid.Cells.Controllers.CheckBox>().CheckedChanged += m_SelectCheckBoxEvent.SetCheckBoxStatus(m_ClickRow);
  604. }
  605. log.Trace(str);
  606. }
  607. object val = m_PropWindow.PropGrid[m_ClickRow, 2].Value;
  608. }
  609. void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  610. {
  611. //这时后台线程已经完成,并返回了主线程,所以可以直接使用UI控件了
  612. object val = m_PropWindow.PropGrid[m_ClickRow, 2].Value;
  613. log.Trace("Exit WorkThread");
  614. m_ReqChangeValFlag = true;
  615. m_PropWindow.PropGrid.Refresh();
  616. }
  617. }
  618. //当选择了Grid的某个row ,修改Row的值,引发的事件
  619. class ChangeGridCellValEvent : SourceGrid.Cells.Controllers.ControllerBase
  620. {
  621. OTSDisplaySampleGrid m_SampleGrid = null;
  622. public ChangeGridCellValEvent(OTSDisplaySampleGrid SGrid)
  623. {
  624. m_SampleGrid = SGrid;
  625. }
  626. public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e)
  627. {
  628. string str = sender.Value.ToString();
  629. //校验输入进的值是否符合输入标准,根据str输入的值,
  630. if (Verify(str, (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag,
  631. (OTS_ITEM_TYPES)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Tag) == false)
  632. {
  633. return;
  634. }
  635. base.OnValueChanged(sender, e);
  636. if (m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  637. {
  638. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag;
  639. object objVal = m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value;
  640. if(m_SampleGrid.m_ReqChangeValFlag)
  641. {
  642. OTS_ITEM_TYPES ValType = (OTS_ITEM_TYPES)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Tag;
  643. if (ValType == OTS_ITEM_TYPES.COMBO )
  644. {
  645. objVal= m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Editor.StandardValuesIndexOf(objVal);
  646. }
  647. m_SampleGrid.m_PropWindow.SampleGridInfoChange(SampleId, ValType, objVal);
  648. }
  649. }
  650. }
  651. /// <summary>
  652. /// 对属性窗体中各项,输入的值类型进行校验
  653. /// </summary>
  654. /// <param name="in_str"></param>
  655. /// <param name="sampleitem"></param>
  656. /// <param name="ValType"></param>
  657. /// <returns></returns>
  658. public bool Verify(string in_str, OTS_SAMPLE_PROP_GRID_ITEMS sampleitem, OTS_ITEM_TYPES ValType)
  659. {
  660. //Regex rg_szzmxhx = new Regex(@"^\w+$"); //由数字、26个英文字母或者下划线组成的字符串
  661. Regex rg_szzmxhx = new Regex(@"^.{1,20}$");
  662. Regex rg_zzs_hl = new Regex(@"^\d+$"); //正整数含0
  663. Regex rg_zzs_bhl = new Regex(@"^\+?[1-9][0-9]*$"); //正整数不含0
  664. Regex rg_fds_bhl = new Regex(@"^(0|[1-9]+[0-9]*)(\.[0-9]{1,4})?$"); //正浮点数含0,需要和判断0配合使用
  665. if (in_str.Trim() == "")
  666. {
  667. return false;
  668. }
  669. switch (sampleitem)
  670. {
  671. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME: //样品名(数字、26个英文字母或者下划线)
  672. if (false == rg_szzmxhx.Match(in_str.Trim()).Success)
  673. {
  674. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "Sample";
  675. MessageBox.Show("The length of sample name should not be greater than 20, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  676. return false;
  677. }
  678. break;
  679. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_PARTICLE: //颗粒数(正整数,不含0)
  680. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  681. {
  682. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  683. MessageBox.Show("The particle number of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  684. return false;
  685. }
  686. break;
  687. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_FIELD: //帧图数(正整数,不含0)
  688. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  689. {
  690. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  691. MessageBox.Show("The number of frame is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  692. return false;
  693. }
  694. break;
  695. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_TIME: //测量时间,秒(正整数,不含0)
  696. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  697. {
  698. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  699. MessageBox.Show("The measurement time of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  700. return false;
  701. }
  702. break;
  703. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_AREA: //测量时间,秒(正整数,不含0)
  704. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  705. {
  706. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  707. MessageBox.Show("The measurement time of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  708. return false;
  709. }
  710. break;
  711. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MIN: //颗粒直径最小值(正浮点数,不含0)
  712. if (in_str.Trim() == "0")
  713. {
  714. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "5.00";
  715. MessageBox.Show("The minimum particle diameter of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  716. return false;
  717. }
  718. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  719. {
  720. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "5.00";
  721. MessageBox.Show("The minimum particle diameter of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  722. return false;
  723. }
  724. break;
  725. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MAX: //颗粒直径最大值(正浮点数,不含0)
  726. if (in_str.Trim() == "0")
  727. {
  728. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100.00";
  729. MessageBox.Show("The maximum particle diameter of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  730. return false;
  731. }
  732. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  733. {
  734. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100.00";
  735. MessageBox.Show("The maximum particle diameter of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  736. return false;
  737. }
  738. break;
  739. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MIN: //背景灰度最小值(正整数,含0)
  740. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  741. {
  742. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "146";
  743. MessageBox.Show("The minimum background gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  744. return false;
  745. }
  746. break;
  747. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX: //背景灰度最大值(正整数,含0)
  748. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  749. {
  750. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "255";
  751. MessageBox.Show("The maximum background gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  752. return false;
  753. }
  754. break;
  755. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN: //颗粒灰度最小值(正整数,含0)
  756. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  757. {
  758. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "0";
  759. MessageBox.Show("The minimum gray value of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  760. return false;
  761. }
  762. break;
  763. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX: //颗粒灰度最大值(正整数,含0)
  764. if (false == rg_zzs_hl.Match(in_str.Trim()).Success)
  765. {
  766. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "145";
  767. MessageBox.Show("The maximum value of sample particle gray scale is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  768. return false;
  769. }
  770. break;
  771. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION: //分析x-ray时间,计数率(正整数,不含0)
  772. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  773. {
  774. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "1000";
  775. MessageBox.Show("The analysis x-ray time of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  776. return false;
  777. }
  778. break;
  779. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_COUNTS: //期望计数率(正整数,不含0)
  780. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  781. {
  782. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "1000";
  783. MessageBox.Show("The expected count rate of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  784. return false;
  785. }
  786. break;
  787. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION: //放大倍数(正整数,不含0)
  788. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  789. {
  790. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  791. MessageBox.Show("The magnification of sample is wrong, please input again!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  792. return false;
  793. }
  794. if (Convert.ToInt32(in_str.Trim()) < 45)
  795. {
  796. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "45";
  797. MessageBox.Show("The magnification of the sample is too small, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  798. return false;
  799. }
  800. break;
  801. case OTS_SAMPLE_PROP_GRID_ITEMS.IMAGERESOLUTION_SIZE: //像素尺寸(微米)(正浮点数,不含0)
  802. if (in_str.Trim() == "0") return false;
  803. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  804. {
  805. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "2";
  806. MessageBox.Show("The pixel size of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  807. return false;
  808. }
  809. break;
  810. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS: //覆盖测量区域帧图数(正整数,不含0)
  811. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  812. {
  813. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  814. MessageBox.Show("The number of frames in the coverage measurement area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  815. return false;
  816. }
  817. break;
  818. case OTS_SAMPLE_PROP_GRID_ITEMS.COMPLETED_FIELDS: //完成帧图数(正整数,不含0)
  819. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  820. {
  821. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  822. MessageBox.Show("The number of completed frames of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  823. return false;
  824. }
  825. break;
  826. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_AREA: //检测面积(正整数,不含0)
  827. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  828. {
  829. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100000";
  830. MessageBox.Show("The detection area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  831. return false;
  832. }
  833. break;
  834. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE: //颗粒数(正整数,不含0)
  835. if (false == rg_zzs_bhl.Match(in_str.Trim()).Success)
  836. {
  837. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "100";
  838. MessageBox.Show("The detection area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  839. return false;
  840. }
  841. break;
  842. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE_AREA: //颗粒面积(正整数,不含0)
  843. if (false == rg_fds_bhl.Match(in_str.Trim()).Success)
  844. {
  845. m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value = "10000";
  846. MessageBox.Show("The particle area of the sample is wrong, please re-enter!", "Error Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
  847. return false;
  848. }
  849. break;
  850. default:
  851. break;
  852. }
  853. return true;
  854. }
  855. }
  856. //选择Combobox下拉框中的值引发事件函数
  857. class SelectComboboxItem : SourceGrid.Cells.Controllers.ControllerBase
  858. {
  859. OTSDisplaySampleGrid m_SampleGrid = null;
  860. public SelectComboboxItem(OTSDisplaySampleGrid SGrid)
  861. {
  862. m_SampleGrid = SGrid;
  863. }
  864. public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e)
  865. {
  866. string str = sender.Value.ToString();
  867. if (m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  868. {
  869. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_SampleGrid.m_PropWindow.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag;
  870. String sName = (string)m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 1].Value;
  871. object objVal = m_SampleGrid.m_PropWindow.PropGrid[m_SampleGrid.m_ClickRow, 2].Value;
  872. }
  873. }
  874. }
  875. class SelectGridCellColor : SourceGrid.Cells.Controllers.ControllerBase
  876. {
  877. public SelectGridCellColor()
  878. {
  879. }
  880. public override void OnValueChanged(CellContext sender, EventArgs e)
  881. {
  882. base.OnValueChanged(sender, e);
  883. sender.Grid.BackColor = (Color)sender.Value;
  884. }
  885. }
  886. class EditorFileDialog : SourceGrid.Cells.Editors.TextBoxButton
  887. {
  888. public EditorFileDialog()
  889. : base(typeof(string))
  890. {
  891. Control.DialogOpen += new EventHandler(Control_DialogOpen);
  892. }
  893. void Control_DialogOpen(object sender, EventArgs e)
  894. {
  895. using (OpenFileDialog dg = new OpenFileDialog())
  896. {
  897. dg.FileName = (string)Control.Value;
  898. if (dg.ShowDialog(EditCellContext.Grid) == DialogResult.OK)
  899. {
  900. Control.Value = dg.FileName;
  901. //MessageBox.Show(dg.FileName);
  902. }
  903. }
  904. }
  905. }
  906. class SelcetCheckBoxEvent
  907. {
  908. OTSDisplaySampleGrid m_Grid;
  909. public SelcetCheckBoxEvent(OTSDisplaySampleGrid grid)
  910. {
  911. m_Grid = grid;
  912. }
  913. public EventHandler SetCheckBoxStatus(int row)
  914. {
  915. return delegate
  916. {
  917. if (m_Grid.m_PropWindow.PropGrid.Rows[m_Grid.m_ClickRow].Tag != null) //需要判断每行的Tag 是否绑定sampleID
  918. {
  919. OTS_SAMPLE_PROP_GRID_ITEMS SampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)m_Grid.m_PropWindow.PropGrid.Rows[m_Grid.m_ClickRow].Tag;
  920. String sName = (string)m_Grid.m_PropWindow.PropGrid[m_Grid.m_ClickRow, 1].Value;
  921. object objVal = m_Grid.m_PropWindow.PropGrid[m_Grid.m_ClickRow, 2].Value;
  922. m_Grid.m_PropWindow.SampleGridInfoChange(SampleId, OTS_ITEM_TYPES.BOOL, objVal);
  923. }
  924. };
  925. }
  926. }
  927. }