.Net强大的列表控件XPTable

http://blog.csdn.net/bodybo/article/details/7359531

XPTable的大名,想必C#开发的人都有所耳闻,使用下来确实强大,在表格中添加下拉列表、进度条、图标等非常容易,灵活方便。当添加大量数据时,和.Net自带的ListView对比过,速度快很多!

XPTable最重要的是开源,可根据自己的需要修改,有bug也可想办法解决。我就对其进行了若干处改进,解决了部分bug。源代码写的非常标准,架构设计也很值得借鉴,研读源代码本身就是个学习提高的过程。真心感谢将如此完美的代码公开分享的人,作为点滴回报,也将自己修改后的源码放出,供大家参考,和原作者的贡献比起来,我这点小小的修改就如沧海一粟,不足为道了。

我修改过的代码和解决的问题列示如下(下载我的源代码,在项目中搜索chenbo,就能看到修改注释):

1、...\Models\Table.cs  Line 2118,2153

解决问题:在某些情况下(任意调整窗口大小,XPTable的Anchor设置为随窗口大小自适应调整)会抛System.ArgumentOutOfRangeException异常,vScrollBar.LargeChange不能小于0

2、...\Models\Table.cs  Line 5598,5606

解决问题:在列头Resizing状态下双击鼠标,应根据该列数据中最长的一行调整当前列宽度,目前仅对TextColumn和NumberColumn有效

3、...\Models\Table.cs  Line 6134

解决问题:在列头Resizing状态下单击鼠标,避免OnMouseUp激发列宽的调整。应该双击或者调整宽度后才能激发

4、...\Models\Table.cs  Line 6373

解决问题:根据原代码,如果Table允许多选,选中多行后,点鼠标右键将自动选择鼠标所在行,修改后,多选的行依然选中

这个问题借鉴了“恶猫的尾巴”的代码:http://emao.me/tag/XpTable/,在此感谢!

5、...\Models\Table.cs  Line 6627

解决问题:鼠标在列头为Resizing图标时,移动到数据区域不会自动变为默认图标

6、...\Models\Table.cs  Line 7229

解决问题:解决列头的对齐方式始终是靠左的问题

7、...\Renderers\NumberCellRenderer.cs  Line 661

解决问题:为了实现Table.cs的函数CalColumnWidth中实现对NumberColumn列格式化数据宽度的计算

8、...  刚下载源码后即发现的问题,好像是某个函数col参数有问题,具体不记得哪个文件哪行代码了

我修改后的源代码和Dll下载链接(VS2008 .NetFramework 2.0)

原作者源代码CodeProject链接


自己写了控制类(TableCtrl.cs)来操作XPTable,使用起来更方便

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Drawing;
    5. using System.Windows.Forms;
    6. using System.Runtime.InteropServices;
    7. using XPTable;
    8. using XPTable.Models;
    9. using XPTable.Editors;
    10. namespace ProgramModule
    11. {
    12. struct Key
    13. {
    14. public string name;
    15. public object value;
    16. };
    17. class TableKey
    18. {
    19. private List<Key> m_keys;
    20. public TableKey()
    21. {
    22. m_keys = new List<Key>();
    23. }
    24. public void AddKey(string name, object value)
    25. {
    26. Key key;
    27. key.name = name;
    28. key.value = value;
    29. m_keys.Add(key);
    30. }
    31. public int Count
    32. {
    33. get
    34. {
    35. return m_keys.Count;
    36. }
    37. }
    38. public string GetKeyName(int index)
    39. {
    40. if (index < 0 || index >= Count)
    41. {
    42. return "";
    43. }
    44. else
    45. {
    46. return m_keys[index].name;
    47. }
    48. }
    49. public object GetKeyValue(int index)
    50. {
    51. if (index < 0 || index >= Count)
    52. {
    53. return null;
    54. }
    55. else
    56. {
    57. return m_keys[index].value;
    58. }
    59. }
    60. };
    61. static class TableCtrl
    62. {
    63. const int COLOR_WINDOW = 5;
    64. [DllImport("user32.dll", CharSet = CharSet.Auto)]
    65. private static extern int GetSysColor(int nIndex);
    66. public static Color GetSysWindowColor()
    67. {
    68. Color color;
    69. int iColor = GetSysColor(COLOR_WINDOW);
    70. color = Color.FromArgb(255, Color.FromArgb(iColor));
    71. return color;
    72. }
    73. public static void InitTable(ref Table table)
    74. {
    75. try
    76. {
    77. table.NoItemsText = "";
    78. table.GridLines = GridLines.Both;
    79. table.ColumnModel = new ColumnModel();
    80. table.TableModel = new TableModel();
    81. table.TableModel.RowHeight = 18;
    82. TextColumn textColKey = new TextColumn("key", 70);
    83. textColKey.Visible = false;
    84. table.ColumnModel.Columns.Add(textColKey);
    85. table.FullRowSelect = true;
    86. table.HideSelection = false;
    87. table.BackColor = GetSysWindowColor();
    88. table.SortedColumnBackColor = Color.FromArgb(100, Color.WhiteSmoke);
    89. }
    90. catch (System.Exception ex)
    91. {
    92. GlobalFunction.MsgBoxException(ex.Message, "InitTable");
    93. }
    94. }
    95. public static void AddColumn(ref Table table, Column column)
    96. {
    97. column.Editable = false;
    98. column.Sortable = true;
    99. table.ColumnModel.Columns.Add(column);
    100. }
    101. public static void AddColumn(ref Table table, Column column, bool editable, bool sortable)
    102. {
    103. column.Editable = editable;
    104. column.Sortable = sortable;
    105. table.ColumnModel.Columns.Add(column);
    106. }
    107. public static void AddColumn(ref Table table, Column column, bool editable, bool sortable, ColumnAlignment alignment)
    108. {
    109. column.Editable = editable;
    110. column.Sortable = sortable;
    111. column.Alignment = alignment;
    112. table.ColumnModel.Columns.Add(column);
    113. }
    114. public static void AddNumColumn(ref Table table, NumberColumn column, bool editable, bool sortable, bool showUpDownButton, double minValue, double MaxValue, string format, ColumnAlignment alignment)
    115. {
    116. column.Editable = editable;
    117. column.Sortable = sortable;
    118. column.ShowUpDownButtons = showUpDownButton;
    119. column.Minimum = Convert.ToDecimal(minValue);
    120. column.Maximum = Convert.ToDecimal(MaxValue);
    121. column.Format = format;
    122. column.Alignment = alignment;
    123. table.ColumnModel.Columns.Add(column);
    124. }
    125. //public static int AddNewRow(ref Table table)
    126. //{
    127. //    Row row = new Row();
    128. //    for (int i = 0; i < table.ColumnModel.Columns.Count; i++ )
    129. //    {
    130. //        row.Cells.Add(new Cell());
    131. //    }
    132. //    return table.TableModel.Rows.Add(row);
    133. //}
    134. public static Row AddNewRow(ref Table table)
    135. {
    136. try
    137. {
    138. Row row = new Row();
    139. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    140. {
    141. row.Cells.Add(new Cell());
    142. }
    143. table.TableModel.Rows.Add(row);
    144. return row;
    145. }
    146. catch (System.Exception e)
    147. {
    148. GlobalFunction.MsgBoxException(e.Message, "AddNewRow");
    149. return null;
    150. }
    151. }
    152. public static Row AddNewRow(ref Table table, string key)
    153. {
    154. try
    155. {
    156. foreach (Row row1 in table.TableModel.Rows)
    157. {
    158. if (row1.Cells[0].Text == key)
    159. {
    160. GlobalFunction.MsgBoxError("key is not unique");
    161. return null;
    162. }
    163. }
    164. Row row = new Row();
    165. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    166. {
    167. row.Cells.Add(new Cell());
    168. }
    169. row.Cells[0].Text = key;
    170. table.TableModel.Rows.Add(row);
    171. return row;
    172. }
    173. catch (System.Exception e)
    174. {
    175. GlobalFunction.MsgBoxException(e.Message, "AddNewRow");
    176. return null;
    177. }
    178. }
    179. public static void RemoveRow(ref Table table, int rowIndex)
    180. {
    181. try
    182. {
    183. table.TableModel.Rows.RemoveAt(rowIndex);
    184. }
    185. catch (System.Exception e)
    186. {
    187. MessageBox.Show("RemoveRow:" + e.Message);
    188. }
    189. }
    190. public static void RemoveRow(ref Table table, Row row)
    191. {
    192. try
    193. {
    194. table.TableModel.Rows.Remove(row);
    195. }
    196. catch (System.Exception e)
    197. {
    198. GlobalFunction.MsgBoxException(e.Message, "RemoveRow");
    199. }
    200. }
    201. public static void RemoveRowAll(ref Table table)
    202. {
    203. try
    204. {
    205. table.TableModel.Rows.Clear();
    206. }
    207. catch (System.Exception e)
    208. {
    209. MessageBox.Show("RemoveRowAll:" + e.Message);
    210. }
    211. }
    212. public static void SetTableValue(ref Table table, int rowIndex, string colName, object value)
    213. {
    214. try
    215. {
    216. Column targetCol = null;
    217. int colIndex = -1;
    218. if (rowIndex < 0 || rowIndex >= table.TableModel.Rows.Count)
    219. {
    220. return;
    221. }
    222. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    223. {
    224. if (table.ColumnModel.Columns[i].Text == colName)
    225. {
    226. targetCol = table.ColumnModel.Columns[i];
    227. colIndex = i;
    228. break;
    229. }
    230. }
    231. if (colIndex == -1)
    232. {
    233. return;
    234. }
    235. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    236. {
    237. table.TableModel.Rows[rowIndex].Cells[colIndex].Text = value.ToString();
    238. }
    239. else if (targetCol is CheckBoxColumn)
    240. {
    241. table.TableModel.Rows[rowIndex].Cells[colIndex].Checked = (bool)value;
    242. }
    243. else if (targetCol is ImageColumn)
    244. {
    245. table.TableModel.Rows[rowIndex].Cells[colIndex].Image = (Image)value;
    246. }
    247. else if (targetCol is NumberColumn)
    248. {
    249. if (GlobalFunction.IsNumeric(value.ToString()))
    250. {
    251. table.TableModel.Rows[rowIndex].Cells[colIndex].Data = Convert.ToDouble(value);
    252. }
    253. }
    254. else
    255. {
    256. table.TableModel.Rows[rowIndex].Cells[colIndex].Data = value;
    257. }
    258. }
    259. catch (System.Exception e)
    260. {
    261. GlobalFunction.MsgBoxException(e.Message, "SetTableValue");
    262. }
    263. }
    264. public static void SetTableValue(ref Table table, int rowIndex, int colIndex, object value)
    265. {
    266. try
    267. {
    268. if (colIndex <= 0)
    269. {
    270. return;
    271. }
    272. Column targetCol = table.ColumnModel.Columns[colIndex];
    273. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    274. {
    275. table.TableModel.Rows[rowIndex].Cells[colIndex].Text = value.ToString();
    276. }
    277. else if (targetCol is CheckBoxColumn)
    278. {
    279. table.TableModel.Rows[rowIndex].Cells[colIndex].Checked = (bool)value;
    280. }
    281. else if (targetCol is ImageColumn)
    282. {
    283. table.TableModel.Rows[rowIndex].Cells[colIndex].Image = (Image)value;
    284. }
    285. else if (targetCol is NumberColumn)
    286. {
    287. if (GlobalFunction.IsNumeric(value.ToString()))
    288. {
    289. table.TableModel.Rows[rowIndex].Cells[colIndex].Data = Convert.ToDouble(value);
    290. }
    291. }
    292. else
    293. {
    294. table.TableModel.Rows[rowIndex].Cells[colIndex].Data = value;
    295. }
    296. }
    297. catch (System.Exception e)
    298. {
    299. GlobalFunction.MsgBoxException(e.Message, "SetTableValue");
    300. }
    301. }
    302. public static void SetTableValue(ref Table table, Row row, string colName, object value)
    303. {
    304. try
    305. {
    306. Column targetCol = null;
    307. int colIndex = -1;
    308. if (row == null)
    309. {
    310. return;
    311. }
    312. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    313. {
    314. if (table.ColumnModel.Columns[i].Text == colName)
    315. {
    316. targetCol = table.ColumnModel.Columns[i];
    317. colIndex = i;
    318. break;
    319. }
    320. }
    321. if (colIndex == -1)
    322. {
    323. return;
    324. }
    325. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    326. {
    327. row.Cells[colIndex].Text = value.ToString();
    328. }
    329. else if (targetCol is CheckBoxColumn)
    330. {
    331. row.Cells[colIndex].Checked = (bool)value;
    332. }
    333. else if (targetCol is ImageColumn)
    334. {
    335. row.Cells[colIndex].Image = (Image)value;
    336. }
    337. else if (targetCol is NumberColumn)
    338. {
    339. string val = "";
    340. if (GlobalFunction.FormatNumber(value.ToString(), 8, ref val))
    341. {
    342. row.Cells[colIndex].Data = Convert.ToDouble(val);
    343. }
    344. //if (GlobalFunction.IsNumeric(value.ToString()))
    345. //{
    346. //}
    347. }
    348. else
    349. {
    350. row.Cells[colIndex].Data = value;
    351. }
    352. }
    353. catch (System.Exception e)
    354. {
    355. GlobalFunction.MsgBoxException(e.Message, "SetTableValue");
    356. }
    357. }
    358. public static void SetTableValueCheckbox(ref Table table, int rowIndex, string colName, string text, bool check)
    359. {
    360. try
    361. {
    362. Column targetCol = null;
    363. int colIndex = -1;
    364. if (rowIndex < 0 || rowIndex >= table.TableModel.Rows.Count)
    365. {
    366. return;
    367. }
    368. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    369. {
    370. if (table.ColumnModel.Columns[i].Text == colName)
    371. {
    372. targetCol = table.ColumnModel.Columns[i];
    373. colIndex = i;
    374. break;
    375. }
    376. }
    377. if (colIndex == -1)
    378. {
    379. return;
    380. }
    381. if (targetCol is CheckBoxColumn)
    382. {
    383. table.TableModel.Rows[rowIndex].Cells[colIndex].Text = text;
    384. table.TableModel.Rows[rowIndex].Cells[colIndex].Checked = check;
    385. }
    386. }
    387. catch (System.Exception e)
    388. {
    389. GlobalFunction.MsgBoxException(e.Message, "SetTableValueCheckbox");
    390. }
    391. }
    392. public static void SetTableValueCheckbox(ref Table table, Row row, string colName, string text, bool check)
    393. {
    394. try
    395. {
    396. Column targetCol = null;
    397. int colIndex = -1;
    398. if (row == null)
    399. {
    400. return;
    401. }
    402. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    403. {
    404. if (table.ColumnModel.Columns[i].Text == colName)
    405. {
    406. targetCol = table.ColumnModel.Columns[i];
    407. colIndex = i;
    408. break;
    409. }
    410. }
    411. if (colIndex == -1)
    412. {
    413. return;
    414. }
    415. if (targetCol is CheckBoxColumn)
    416. {
    417. row.Cells[colIndex].Text = text;
    418. row.Cells[colIndex].Checked = check;
    419. }
    420. }
    421. catch (System.Exception e)
    422. {
    423. GlobalFunction.MsgBoxException(e.Message, "SetTableValueCheckbox");
    424. }
    425. }
    426. public static void SetTableValueImage(ref Table table, int rowIndex, string colName, string text, Image image)
    427. {
    428. try
    429. {
    430. Column targetCol = null;
    431. int colIndex = -1;
    432. if (rowIndex < 0 || rowIndex >= table.TableModel.Rows.Count)
    433. {
    434. return;
    435. }
    436. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    437. {
    438. if (table.ColumnModel.Columns[i].Text == colName)
    439. {
    440. targetCol = table.ColumnModel.Columns[i];
    441. colIndex = i;
    442. break;
    443. }
    444. }
    445. if (colIndex == -1)
    446. {
    447. return;
    448. }
    449. if (targetCol is ImageColumn)
    450. {
    451. table.TableModel.Rows[rowIndex].Cells[colIndex].Text = text;
    452. table.TableModel.Rows[rowIndex].Cells[colIndex].Image = image;
    453. }
    454. }
    455. catch (System.Exception e)
    456. {
    457. GlobalFunction.MsgBoxException(e.Message, "SetTableValueImage");
    458. }
    459. }
    460. public static void SetTableValueImage(ref Table table, Row row, string colName, string text, Image image)
    461. {
    462. try
    463. {
    464. Column targetCol = null;
    465. int colIndex = -1;
    466. if (row == null)
    467. {
    468. return;
    469. }
    470. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    471. {
    472. if (table.ColumnModel.Columns[i].Text == colName)
    473. {
    474. targetCol = table.ColumnModel.Columns[i];
    475. colIndex = i;
    476. break;
    477. }
    478. }
    479. if (colIndex == -1)
    480. {
    481. return;
    482. }
    483. if (targetCol is ImageColumn)
    484. {
    485. row.Cells[colIndex].Text = text;
    486. row.Cells[colIndex].Image = image;
    487. }
    488. }
    489. catch (System.Exception e)
    490. {
    491. GlobalFunction.MsgBoxException(e.Message, "SetTableValueImage");
    492. }
    493. }
    494. public static object GetTableValue(Table table, int row, int col)
    495. {
    496. try
    497. {
    498. Column targetCol = null;
    499. int colIndex = -1;
    500. if (row < 0 || row >= table.TableModel.Rows.Count)
    501. {
    502. return null;
    503. }
    504. if (col < 0 || col >= table.ColumnModel.Columns.Count)
    505. {
    506. return null;
    507. }
    508. targetCol = table.ColumnModel.Columns[col];
    509. colIndex = col;
    510. if (colIndex == -1)
    511. {
    512. return null;
    513. }
    514. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    515. {
    516. if (table.TableModel.Rows[row].Cells[colIndex].Text == null)
    517. {
    518. return "";
    519. }
    520. else
    521. {
    522. return table.TableModel.Rows[row].Cells[colIndex].Text;
    523. }
    524. }
    525. else if (targetCol is CheckBoxColumn)
    526. {
    527. return table.TableModel.Rows[row].Cells[colIndex].Checked;
    528. }
    529. else
    530. {
    531. return table.TableModel.Rows[row].Cells[colIndex].Data;
    532. }
    533. }
    534. catch (System.Exception e)
    535. {
    536. GlobalFunction.MsgBoxException(e.Message, "GetTableValue");
    537. return null;
    538. }
    539. }
    540. public static string GetTableValueString(Table table, int row, int col)
    541. {
    542. try
    543. {
    544. Column targetCol = null;
    545. int colIndex = -1;
    546. if (row < 0 || row >= table.TableModel.Rows.Count)
    547. {
    548. return "";
    549. }
    550. if (col < 0 || col >= table.ColumnModel.Columns.Count)
    551. {
    552. return "";
    553. }
    554. targetCol = table.ColumnModel.Columns[col];
    555. colIndex = col;
    556. if (colIndex == -1)
    557. {
    558. return "";
    559. }
    560. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    561. {
    562. if (table.TableModel.Rows[row].Cells[colIndex].Text == null)
    563. {
    564. return "";
    565. }
    566. else
    567. {
    568. return table.TableModel.Rows[row].Cells[colIndex].Text;
    569. }
    570. }
    571. else if (targetCol is CheckBoxColumn)
    572. {
    573. return table.TableModel.Rows[row].Cells[colIndex].Checked.ToString();
    574. }
    575. else
    576. {
    577. return table.TableModel.Rows[row].Cells[colIndex].Data.ToString();
    578. }
    579. }
    580. catch (System.Exception e)
    581. {
    582. GlobalFunction.MsgBoxException(e.Message, "GetTableValueString");
    583. return "";
    584. }
    585. }
    586. public static object GetTableValue(Table table, int row, string colName)
    587. {
    588. try
    589. {
    590. Column targetCol = null;
    591. int colIndex = -1;
    592. if (row < 0 || row >= table.TableModel.Rows.Count)
    593. {
    594. return null;
    595. }
    596. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    597. {
    598. if (table.ColumnModel.Columns[i].Text == colName)
    599. {
    600. targetCol = table.ColumnModel.Columns[i];
    601. colIndex = i;
    602. break;
    603. }
    604. }
    605. if (colIndex == -1)
    606. {
    607. return null;
    608. }
    609. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    610. {
    611. if (table.TableModel.Rows[row].Cells[colIndex].Text == null)
    612. {
    613. return "";
    614. }
    615. else
    616. {
    617. return table.TableModel.Rows[row].Cells[colIndex].Text;
    618. }
    619. }
    620. else if (targetCol is CheckBoxColumn)
    621. {
    622. return table.TableModel.Rows[row].Cells[colIndex].Checked;
    623. }
    624. else
    625. {
    626. return table.TableModel.Rows[row].Cells[colIndex].Data;
    627. }
    628. }
    629. catch (System.Exception e)
    630. {
    631. GlobalFunction.MsgBoxException(e.Message, "GetTableValue");
    632. return null;
    633. }
    634. }
    635. public static string GetTableValueString(Table table, int row, string colName)
    636. {
    637. try
    638. {
    639. Column targetCol = null;
    640. int colIndex = -1;
    641. if (row < 0 || row >= table.TableModel.Rows.Count)
    642. {
    643. return "";
    644. }
    645. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    646. {
    647. if (table.ColumnModel.Columns[i].Text == colName)
    648. {
    649. targetCol = table.ColumnModel.Columns[i];
    650. colIndex = i;
    651. break;
    652. }
    653. }
    654. if (colIndex == -1)
    655. {
    656. return "";
    657. }
    658. if (targetCol is TextColumn || targetCol is ComboBoxColumn || targetCol is ButtonColumn)
    659. {
    660. if (table.TableModel.Rows[row].Cells[colIndex].Text == null)
    661. {
    662. return "";
    663. }
    664. else
    665. {
    666. return table.TableModel.Rows[row].Cells[colIndex].Text;
    667. }
    668. }
    669. else if (targetCol is CheckBoxColumn)
    670. {
    671. return table.TableModel.Rows[row].Cells[colIndex].Checked.ToString();
    672. }
    673. else
    674. {
    675. return table.TableModel.Rows[row].Cells[colIndex].Data.ToString();
    676. }
    677. }
    678. catch (System.Exception e)
    679. {
    680. GlobalFunction.MsgBoxException(e.Message, "GetTableValueString");
    681. return "";
    682. }
    683. }
    684. public static Row GetTableRowByKey(ref Table table, string key)
    685. {
    686. try
    687. {
    688. foreach (Row row in table.TableModel.Rows)
    689. {
    690. if (row.Cells[0].Text == key)
    691. {
    692. return row;
    693. }
    694. }
    695. return null;
    696. }
    697. catch (System.Exception e)
    698. {
    699. GlobalFunction.MsgBoxException(e.Message, "GetTableRowByKey");
    700. return null;
    701. }
    702. }
    703. public static int GetTableRowByKey(ref Table table, TableKey keys)
    704. {
    705. try
    706. {
    707. int i, j;
    708. int row = -1;
    709. int keyCount;
    710. keyCount = keys.Count;
    711. if (keyCount <= 0)
    712. {
    713. return -1;
    714. }
    715. for (i = 0; i < table.TableModel.Rows.Count; i++)
    716. {
    717. for (j = 0; j < keyCount; j++)
    718. {
    719. if (!object.Equals(GetTableValue(table, i, keys.GetKeyName(j)), keys.GetKeyValue(j)))
    720. {
    721. break;
    722. }
    723. }
    724. if (j == keyCount)
    725. {
    726. row = i;
    727. break;
    728. }
    729. }
    730. return row;
    731. }
    732. catch (System.Exception e)
    733. {
    734. GlobalFunction.MsgBoxException(e.Message, "GetTableRowByKey");
    735. return -1;
    736. }
    737. }
    738. public static int GetColumnIndexByName(Table table, string strColName)
    739. {
    740. try
    741. {
    742. if (table.ColumnModel.Columns.Count <= 0)
    743. {
    744. return -1;
    745. }
    746. else
    747. {
    748. for (int i = 0; i < table.ColumnModel.Columns.Count; i++)
    749. {
    750. if (table.ColumnModel.Columns[i].Text == strColName)
    751. {
    752. return i;
    753. }
    754. }
    755. return -1;
    756. }
    757. }
    758. catch (System.Exception ex)
    759. {
    760. GlobalFunction.MsgBoxException(ex.Message, "GetColumnIndexByName");
    761. return -1;
    762. }
    763. }
    764. public static void SetCellBackColor(ref Table table, int row, string strColName, Color color)
    765. {
    766. try
    767. {
    768. if (row >= table.TableModel.Rows.Count || row < 0)
    769. {
    770. return;
    771. }
    772. int col = GetColumnIndexByName(table, strColName);
    773. if (col == -1)
    774. {
    775. return;
    776. }
    777. table.TableModel.Rows[row].Cells[col].BackColor = color;
    778. }
    779. catch (System.Exception ex)
    780. {
    781. GlobalFunction.MsgBoxException(ex.Message, "SetCellBackColor");
    782. }
    783. }
    784. public static void SetRowBackColor(ref Table table, int row, Color color)
    785. {
    786. try
    787. {
    788. if (row >= table.TableModel.Rows.Count || row < 0)
    789. {
    790. return;
    791. }
    792. table.TableModel.Rows[row].BackColor = color;
    793. //for (int col = 0; col < table.ColumnModel.Columns.Count; col++)
    794. //{
    795. //    table.TableModel.Rows[row].Cells[col].BackColor = color;
    796. //}
    797. }
    798. catch (System.Exception ex)
    799. {
    800. GlobalFunction.MsgBoxException(ex.Message, "SetRowBackColor");
    801. }
    802. }
    803. public static void SetCellForeColor(ref Table table, int row, string strColName, Color color)
    804. {
    805. try
    806. {
    807. if (row >= table.TableModel.Rows.Count || row < 0)
    808. {
    809. return;
    810. }
    811. int col = GetColumnIndexByName(table, strColName);
    812. if (col == -1)
    813. {
    814. return;
    815. }
    816. table.TableModel.Rows[row].Cells[col].ForeColor = color;
    817. }
    818. catch (System.Exception ex)
    819. {
    820. GlobalFunction.MsgBoxException(ex.Message, "SetCellForeColor");
    821. }
    822. }
    823. public static void SetRowForeColor(ref Table table, int row, Color color)
    824. {
    825. try
    826. {
    827. if (row >= table.TableModel.Rows.Count || row < 0)
    828. {
    829. return;
    830. }
    831. table.TableModel.Rows[row].ForeColor = color;
    832. //for (int col = 0; col < table.ColumnModel.Columns.Count; col++)
    833. //{
    834. //    table.TableModel.Rows[row].Cells[col].ForeColor = color;
    835. //}
    836. }
    837. catch (System.Exception ex)
    838. {
    839. GlobalFunction.MsgBoxException(ex.Message, "SetRowForeColor");
    840. }
    841. }
    842. public static void SetColumnBackColor(ref Table table, string strColName, Color color)
    843. {
    844. try
    845. {
    846. if (table.TableModel.Rows.Count <= 0)
    847. {
    848. return;
    849. }
    850. int col = GetColumnIndexByName(table, strColName);
    851. if (col == -1)
    852. {
    853. return;
    854. }
    855. foreach (Row row in table.TableModel.Rows)
    856. {
    857. row.Cells[col].BackColor = color;
    858. }
    859. }
    860. catch (System.Exception ex)
    861. {
    862. GlobalFunction.MsgBoxException(ex.Message, "SetColumnBackColor");
    863. }
    864. }
    865. public static void SetColumnForeColor(ref Table table, string strColName, Color color)
    866. {
    867. try
    868. {
    869. if (table.TableModel.Rows.Count <= 0)
    870. {
    871. return;
    872. }
    873. int col = GetColumnIndexByName(table, strColName);
    874. if (col == -1)
    875. {
    876. return;
    877. }
    878. foreach (Row row in table.TableModel.Rows)
    879. {
    880. row.Cells[col].ForeColor = color;
    881. }
    882. }
    883. catch (System.Exception ex)
    884. {
    885. GlobalFunction.MsgBoxException(ex.Message, "SetColumnForeColor");
    886. }
    887. }
    888. public static void SelectRow(ref Table table, int rowIndex)
    889. {
    890. try
    891. {
    892. if (rowIndex >= 0 && rowIndex < table.TableModel.Rows.Count)
    893. {
    894. table.TableModel.Selections.SelectCells(rowIndex, 0, rowIndex, table.ColumnModel.Columns.Count - 1);
    895. }
    896. }
    897. catch (System.Exception ex)
    898. {
    899. GlobalFunction.MsgBoxException(ex.Message, "SelectRow");
    900. }
    901. }
    902. public static void Sort(ref Table table, string strColName, SortOrder order, bool stable)
    903. {
    904. try
    905. {
    906. if (table.TableModel.Rows.Count <= 0)
    907. {
    908. return;
    909. }
    910. int col = GetColumnIndexByName(table, strColName);
    911. if (col == -1)
    912. {
    913. return;
    914. }
    915. else
    916. {
    917. table.Sort(col, order, stable);
    918. }
    919. }
    920. catch (System.Exception ex)
    921. {
    922. GlobalFunction.MsgBoxException(ex.Message, "Sort");
    923. }
    924. }
    925. }
    926. }

.Net强大的列表控件XPTable [转]的更多相关文章

  1. Github上star数超1000的Android列表控件

    Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...

  2. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  3. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  4. WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...

  5. Flex 列表控件中的操作

    主要操作包括:显示提示,使用图标,编辑列表条目中数据. 1.使用数据提示: 当鼠标停留在条目上时,可以显示该条目的相关数据提示. 当利用滚动条时,可以显示滚动条的相关提示. 在列表控件中使用showD ...

  6. cocos2dx实现功能强大的RichText控件

    转自:http://blog.csdn.net/ljxfblog/article/details/26136773 最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控件来显示 ...

  7. VC++ 列表控件的使用方法

    列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值.MFC中使用CListCtrl类来封装列表控件的各种操作. 通过调用BOOL Create( DWORD ...

  8. 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法

    实际使用MVVM进行WPF开发的时候,可能会用到列表控件中每行一个编辑或删除按钮,这时直接去绑定,发现无法响应: <DataGridTemplateColumn Header="操作& ...

  9. Android自定义标签列表控件LabelsView解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果:   标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...

随机推荐

  1. UVA1316 Supermarket

    题目描述 有一个商店有许多批货,每一批货又有N(0<=N<= 10^4104 )个商品,同时每一样商品都有收益 P_iPi​ ,和过期时间 D_iDi​ (1<= Pi,DiPi,D ...

  2. hdu 6102 GCDispower

    多校6 GCDispower(容斥) 题意: 给一个长度为\(n\)的排列 给q组询问 每次查询\(L,R\)内的答案 \(\sum_{i=L}^{R}\sum_{j=i+1}^{R}\sum_{k= ...

  3. poj 1764 Dice Contest

    题目戳这里. 首先我要吐槽这个题目描述不清.\(2\)对着选手,那选手朝那边?看完别人写的程序后我才知道选手对着目标所在的方向(或左或右). 然后这道题还是不错的,因为他交给我矩阵乘法不只有常规意义下 ...

  4. Guns V2.5

    Guns V2.5 新版Guns基于SpringBoot全面升级,完美整合springmvc + shiro + MyBatis 通用 Mapper + 分页插件 PageHelper + beetl ...

  5. ajax知识点补充

    读取服务器上的数据: HTML: <!DOCTYPE HTML><html><head><meta charset="utf-8"> ...

  6. RSA解密报错java.security.spec.InvalidKeySpecException的解决办法

    java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid p ...

  7. java集合类深入分析之PriorityQueue(二)

    PriorityQueue介绍 在平时的编程工作中似乎很少碰到PriorityQueue(优先队列) ,故很多人一开始看到优先队列的时候还会有点迷惑.优先队列本质上就是一个最小堆.前面一篇文章介绍了堆 ...

  8. tortoise git使用 git版本库的rsa key来进行ssh连接

    接触git以来 ,开始时用了命令行,但是命令行总归不如图形化菜单方便明了,而GIT本身自带的GUI又用的不习惯,以前用过许久的TOTORISE SVN,幸好有TORTOISE GIT,这个版本图形化工 ...

  9. jquery 追加元素的方法(append prepend after before 的区别)

    append() 方法在被选元素的结尾插入内容. prepend() 方法在被选元素的开头插入内容. after() 方法在被选元素之后插入内容. before() 方法在被选元素之前插入内容. &l ...

  10. trickle charging current is 0A ?

    Recently, I test trickle charging current of the smart phone. It's 0A. ?????????????????????? yes, i ...