using System;
using System.Data;
using System.Text;
using System.Globalization;
using System.Collections;
using System.Reflection;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Runtime.InteropServices;
namespace CommonFrame.OCX
{
///
1<summary>
2/// 为ListView增加数据绑定、查找和排序功能
3/// </summary>
///
#region 枚举
public enum SortType
{
String,
Number,
Date
}
#endregion
#region 继承实现ListView列表类
public class ListViewEx : System.Windows.Forms.ListView
{
#region 列表项目所需的WIndows32 API定义
[StructLayout(LayoutKind.Sequential)]
private struct HDITEM
{
public Int32 mask;
public Int32 cxy;
[MarshalAs(UnmanagedType.LPTStr)]
public String pszText;
public IntPtr hbm;
public Int32 cchTextMax;
public Int32 fmt;
public Int32 lParam;
public Int32 iImage;
public Int32 iOrder;
};
[StructLayout(LayoutKind.Sequential) ]
public struct LVFINDINFO
{
public LVFI_FLAGS flags;
public string psz;
public IntPtr lParam;
public Point pt;
public VirtualKey vkDirection ;
}
public enum LVFI_FLAGS
{
LVFI_PARAM = 0x1,
LVFI_PARTIAL = 0x8,
LVFI_STRING = 0x2,
LVFI_WRAP = 0x20,
LVFI_NEARESTXY = 0x40,
}
public enum VirtualKey
{
VK_LEFT = 0x25,
VK_RIGHT = 0x27,
VK_UP = 0x26,
VK_DOWN = 0x28,
VK_HOME = 0x24,
VK_END = 0x23,
VK_PRIOR = 0x21,
VK_NEXT = 0x22
}
[DllImport("user32")]
static extern IntPtr SendMessage(IntPtr Handle, Int32 msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32", EntryPoint="SendMessage")]
static extern IntPtr SendMessageH(IntPtr Handle, Int32 msg, IntPtr wParam, ref HDITEM lParam);
[DllImport("user32.dll", EntryPoint="SendMessage", CharSet=CharSet.Auto)]
static extern int SendMessageL(System.IntPtr hWnd, Int32 msg, int wParam, ref LVFINDINFO lparam);
const Int32 HDI_WIDTH = 0x0001;
const Int32 HDI_HEIGHT = HDI_WIDTH;
const Int32 HDI_TEXT = 0x0002;
const Int32 HDI_FORMAT = 0x0004;
const Int32 HDI_LPARAM = 0x0008;
const Int32 HDI_BITMAP = 0x0010;
const Int32 HDI_IMAGE = 0x0020;
const Int32 HDI_DI_SETITEM = 0x0040;
const Int32 HDI_ORDER = 0x0080;
const Int32 HDI_FILTER = 0x0100; // 0x0500
const Int32 HDF_LEFT = 0x0000;
const Int32 HDF_RIGHT = 0x0001;
const Int32 HDF_CENTER = 0x0002;
const Int32 HDF_JUSTIFYMASK = 0x0003;
const Int32 HDF_RTLREADING = 0x0004;
const Int32 HDF_OWNERDRAW = 0x8000;
const Int32 HDF_STRING = 0x4000;
const Int32 HDF_BITMAP = 0x2000;
const Int32 HDF_BITMAP_ON_RIGHT = 0x1000;
const Int32 HDF_IMAGE = 0x0800;
const Int32 HDF_SORTUP = 0x0400; // 0x0501
const Int32 HDF_SORTDOWN = 0x0200; // 0x0501
const Int32 LVM_FIRST = 0x1000; // List 消息
const Int32 LVM_FINDITEMA = LVM_FIRST + 13;
const Int32 LVM_FINDITEMW = LVM_FIRST + 83;
const Int32 LVM_GETHEADER = LVM_FIRST + 31;
const Int32 HDM_FIRST = 0x1200; // Header 消息
const Int32 HDM_SETIMAGELIST = HDM_FIRST + 8;
const Int32 HDM_GETIMAGELIST = HDM_FIRST + 9;
const Int32 HDM_GETITEM = HDM_FIRST + 11;
const Int32 HDM_SETITEM = HDM_FIRST + 12;
#endregion
private string m_strDataFilter = "";
private int m_intSortColumn = -1;
private string m_strDataMember = "";
private CurrencyManager m_objDataManager = null;
private DataSet m_objData = null;
private DataView m_objView = null;
internal bool m_blnModifiedItem = true;
private CommonFrame.OCX.ListViewItemsCollection m_objItems ;
private CommonFrame.OCX.ColumnHeaderMappingCollection m_objMappings ;
public ListViewEx()
{
m_objItems = new CommonFrame.OCX.ListViewItemsCollection(this);
m_objMappings = new CommonFrame.OCX.ColumnHeaderMappingCollection();
}
#region 属性
[
CategoryAttribute("Data"),
BrowsableAttribute(true),
DescriptionAttribute("设置的数据成员"),
DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible),
DefaultValueAttribute("")
]
public string DataMember
{
get
{
return m_strDataMember;
}
set
{
m_strDataMember = value;
//this.SetDataMember();
}
}
[
CategoryAttribute("Data"),
BrowsableAttribute(true),
DescriptionAttribute("设置数据源"),
DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible),
DefaultValueAttribute(null)
]
public DataSet DataSource
{
get
{
return m_objData;
}
set
{
m_objData = value;
this.SetDataSource();
}
}
[
BrowsableAttribute(false),
DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)
]
public string DataFilter
{
get
{
return m_strDataFilter;
}
set
{
if (this.m_objData != null)
{
m_strDataFilter = value;
this.SetDataFilter();
}
else
{
m_strDataFilter = "";
}
}
}
[
CategoryAttribute("杂项"),
BrowsableAttribute(true),
DescriptionAttribute("列表项集合"),
DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content),
DefaultValueAttribute(null)
]
public CommonFrame.OCX.ListViewItemsCollection Items
{
get
{
return m_objItems;
}
}
[
CategoryAttribute("杂项"),
BrowsableAttribute(true),
DescriptionAttribute("列表标头与数据成员映射集合"),
DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content),
DefaultValueAttribute(null)
]
public CommonFrame.OCX.ColumnHeaderMappingCollection ColumnHeaderMappings
{
get
{
return m_objMappings;
}
set
{
m_objMappings = value;
}
}
public bool MultiSelect
{
get
{
return base.MultiSelect;
}
set
{
base.MultiSelect = value;
if ((this.DataSource != null) && (base.MultiSelect == true))
{
base.MultiSelect = false;
throw new Exception("已经设置了数据源DataSource,不能多选");
}
}
}
#endregion
#region 方法
// 填充数据
private void FillListViewItems()
{
ListViewItem item = null;
int intRowCount = this.m_objDataManager.Count ;
this.BeginUpdate();
//允许修改列表项目
this.m_blnModifiedItem = true;
//清除已经有的列表项目
if(this.Items.Count>0)
{
this.Items.Clear();
}
for(int i=0;i
1<introwcount;i++) !="null)" "="" #endregion="" #region="" &&="" (="" ((m_objdata="null)" ((this.focuseditem="" ((this.parent!="null)" (e);="" (includesubitemsinsearch="false)" (intitemindex="" (intsubitemindex="" (itemtext="objItem.SubItems[intSubItemIndex].Text)" (listview.items.count="0)" (listview.items[i].text="itemText)" (m_objdata="" (m_objdatamanager="null)" (m_strdatamember="" (objdc="" (this.items.count="" (this.parent.bindingcontext="" (this.sorting="SortOrder.Descending)" ))="" +="" ;="" <="" base.onbindingcontextchanged="" base.oncolumnclick="" base.onselectedindexchanged="" ch="this.Columns.Add(objDC[i].ColumnName.Trim(),60,HorizontalAlignment.Left);" columnheader="" datacolumncollection="" datasource_positionchanged(object="" e)="" else="" eventhandler(datasource_positionchanged);="" finditem(listview="" for(="" for(int="" i="0;i<listView.Items.Count;i++)" if="" if(e.column="m_intSortColumn)" includesubitemsinsearch)="" int="" intitemindex="" intsubitemindex="" item="new" item.subitems.add(m_objview[i][this.m_objmappings[j].mappingfield].tostring());="" itemchangedeventhandler(datasource_itemchanged);="" itemtext,bool="" j="1;j<this.m_objMappings.Count;j++)" listview,string="" listview.items.count)="" listview.items[i].ensurevisible();="" listview.items[i].selected="true;" listview.items[i];="" listviewitem="" listviewitem(m_objview[i][this.m_objmappings[0].mappingfield].tostring());="" listviewitemcomparer(m_intsortcolumn,this.sorting,this.m_objmappings[m_intsortcolumn].sorttype);="" m_intsortcolumn="e.Column;" m_objdatamanager="(CurrencyManager)this.Parent.BindingContext[m_objData,m_strDataMember];" m_objdatamanager.itemchanged="" m_objdatamanager.position="(int)this.FocusedItem.Index" m_objdatamanager.positionchanged="" m_objview.rowfilter="this.DataFilter;" m_objview.sort="this.m_objMappings[m_intSortColumn].MappingField" null;="" objdc="m_objData.Tables[m_strDataMember].Columns;" objitem="listView.Items[intItemIndex];" objitem.ensurevisible();="" objitem.selected="true;" objitem.subitems.count)="" objitem;="" onbindingcontextchanged(eventargs="" oncolumnclick(columnclickeventargs="" onselectedindexchanged(eventargs="" override="" private="" protected="" public="" return="" return;="" sender,eventargs="" setdatafilter()="" setdatamember()="" setdatasource()="" string="" strorder="Desc" strorder;="" this.columnheadermappings.clear();="" this.columns.clear();="" this.datafilter="" this.endupdate();="" this.items.add(item);="" this.items.clear();="" this.listviewitemsorter="new" this.m_blnmodifieditem="false;" this.m_objmappings.add(ch,objdc[i].columnname.trim());="" this.m_objview="(DataView)m_objDataManager.List;" this.multiselect="false;" this.sort();="" this.sorting="SortOrder.Ascending)" void="" while="" {="" ||="" ||(m_strdatamember="" }="" 事件="" 在选择列表项后,同步其他数据绑定的控件="" 对于没有进行数据绑定时,使用listview本身的排序功能="" 对于进行数据绑定时的排序,使用dataview的排序功能="" 当其他的数据绑定控件修改当前选项时,listview同步="" 排序="" 查找项目="" 清空列表项目="" 获取currencymanager,以实现同其他数据绑定控件的同步="" 设置多选属性为单选=""> 0 )
2{
3this.Items[m_objDataManager.Position].Selected = true;
4this.Items[m_objDataManager.Position].EnsureVisible();
5}
6}
7
8//当数据源DataSet有内容时,自动填充ListView
9private void DataSource_ItemChanged(object sender ,ItemChangedEventArgs e)
10{
11if (this.DesignMode == false)
12{
13FillListViewItems();
14
15}
16}
17#endregion
18}
19
20#endregion
21#region 排序管理类
22
23public class ListViewItemComparer : System.Collections.IComparer
24{
25private int m_intColumn = 0;
26private SortType m_enmSortType = SortType.String;
27private SortOrder m_enmSortOrder = SortOrder.Ascending ;
28
29public ListViewItemComparer (int columnIndex,SortOrder sortOrder)
30{
31m_intColumn = columnIndex;
32m_enmSortOrder = sortOrder;
33}
34
35public ListViewItemComparer (int columnIndex,SortOrder sortOrder,SortType sortType)
36{
37m_intColumn = columnIndex;
38m_enmSortType = sortType;
39m_enmSortOrder = sortOrder;
40}
41
42int IComparer.Compare(object x, object y)
43{
44int intSort = 0;
45
46if(m_enmSortType == SortType.String) //字符排序
47{
48intSort = String.Compare(((ListViewItem)x).SubItems[m_intColumn].Text.Trim(),
49((ListViewItem)y).SubItems[m_intColumn].Text.Trim()
50);
51}
52else if (m_enmSortType == SortType.Number) //数值排序
53{
54try
55{
56System.Double firstNumber =
57Double.Parse(((ListViewItem)x).SubItems[m_intColumn].Text);
58System.Double secondNumber =
59Double.Parse(((ListViewItem)y).SubItems[m_intColumn].Text);
60if (firstNumber > secondNumber)
61{
62intSort = 1;
63}
64else if (firstNumber < secondNumber)
65{
66intSort = -1;
67}
68else
69{
70intSort = 0;
71}
72}
73catch
74{
75intSort = String.Compare(((ListViewItem)x).SubItems[m_intColumn].Text,
76((ListViewItem)y).SubItems[m_intColumn].Text);
77}
78}
79else if (m_enmSortType == SortType.Date) //日期排序
80{
81try
82{
83System.DateTime firstDate =
84DateTime.Parse(((ListViewItem)x).SubItems[m_intColumn].Text);
85System.DateTime secondDate =
86DateTime.Parse(((ListViewItem)y).SubItems[m_intColumn].Text);
87intSort = DateTime.Compare(firstDate, secondDate);
88}
89catch
90{
91intSort = String.Compare(((ListViewItem)x).SubItems[m_intColumn].Text,
92((ListViewItem)y).SubItems[m_intColumn].Text);
93}
94}
95
96if(m_enmSortOrder == SortOrder.Descending)
97{
98return intSort*= -1;
99}
100else
101{
102return intSort;
103}
104}
105}
106
107#endregion
108
109#region 继承列表项目集合类。当设定DataSource属性时,不允许增加、插入、删除列表项目
110
111public class ListViewItemsCollection : ListView.ListViewItemCollection
112{
113private CommonFrame.OCX.ListViewEx m_lvwBase = null;
114
115public ListViewItemsCollection(CommonFrame.OCX.ListViewEx listView):base(listView)
116{
117m_lvwBase = listView;
118}
119
120public int Count
121{
122get
123{
124return base.Count;
125}
126}
127
128public ListViewItem this[int index]
129{
130get
131{
132return base[index];
133}
134}
135
136public int IndexOf(ListViewItem item)
137{
138return base.IndexOf(item);
139}
140
141public void Remove(System.Windows.Forms.ListViewItem item)
142{
143if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
144{
145throw new Exception("已经设置了DataSource,不允许删除项目");
146}
147else
148{
149base.Remove(item);
150}
151}
152
153public void RemoveAt(int index)
154{
155if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
156{
157throw new Exception("已经设置了DataSource,不允许删除项目");
158}
159else
160{
161base.RemoveAt(index);
162}
163}
164
165public System.Windows.Forms.ListViewItem Add(string text)
166{
167if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
168{
169throw new Exception("已经设置了DataSource,不允许添加项目");
170}
171else
172{
173return base.Add(text);
174}
175}
176
177public System.Windows.Forms.ListViewItem Add(string text,int imageIndex)
178{
179if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
180{
181throw new Exception("已经设置了DataSource,不允许添加项目");
182}
183else
184{
185return base.Add(text,imageIndex);
186}
187}
188
189public void Insert(int index,System.Windows.Forms.ListViewItem item)
190{
191if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
192{
193throw new Exception("已经设置了DataSource,不允许添加项目");
194}
195else
196{
197base.Insert(index,item);
198}
199}
200
201public void Insert(int index,string text)
202{
203if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
204{
205throw new Exception("已经设置了DataSource,不允许添加项目");
206}
207else
208{
209base.Insert(index,text);
210}
211}
212
213public void Insert(int index,string text,int imageIndex)
214{
215if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
216{
217throw new Exception("已经设置了DataSource,不允许添加项目");
218}
219else
220{
221base.Insert(index,text,imageIndex);
222}
223}
224
225public void AddRange(System.Windows.Forms.ListViewItem[] values)
226{
227if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
228{
229throw new Exception("已经设置了DataSource,不允许添加项目");
230}
231else
232{
233base.AddRange(values);
234}
235}
236
237public void Clear()
238{
239if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
240{
241throw new Exception("已经设置了DataSource,不允许清空项目");
242}
243else
244{
245base.Clear();
246}
247}
248}
249
250#endregion
251
252#region 列标头映射集合类,实现IList接口,对ColumnHeaderMapping类进行管理
253
254public class ColumnHeaderMappingCollection : System.Collections.IList
255{
256private ArrayList m_arrColumnHearderMapping = new ArrayList(15);
257
258public ColumnHeaderMappingCollection()
259{
260}
261
262#region 实现IList接口
263
264int IList.Add(object value)
265{
266return m_arrColumnHearderMapping.Add(value);
267}
268
269void IList.Clear()
270{
271m_arrColumnHearderMapping.Clear();
272}
273
274bool IList.Contains(object item)
275{
276return m_arrColumnHearderMapping.Contains(item);
277}
278
279int IList.IndexOf(object value)
280{
281return m_arrColumnHearderMapping.IndexOf(value);
282}
283
284void IList.Insert(int index,object value)
285{
286m_arrColumnHearderMapping.Insert(index,value);
287}
288
289bool IList.IsFixedSize
290{
291get
292{
293return m_arrColumnHearderMapping.IsFixedSize;
294}
295}
296
297bool IList.IsReadOnly
298{
299get
300{
301return m_arrColumnHearderMapping.IsReadOnly;
302}
303}
304
305void IList.Remove(object obj)
306{
307m_arrColumnHearderMapping.Remove(obj);
308}
309
310void IList.RemoveAt(int index)
311{
312m_arrColumnHearderMapping.RemoveAt(index);
313}
314
315object IList.this[int index]
316{
317get
318{
319return m_arrColumnHearderMapping[index];
320}
321set
322{
323}
324}
325
326bool System.Collections.ICollection.IsSynchronized
327{
328get
329{
330return m_arrColumnHearderMapping.IsSynchronized;
331}
332}
333
334object System.Collections.ICollection.SyncRoot
335{
336get
337{
338return m_arrColumnHearderMapping.SyncRoot;
339}
340}
341
342void System.Collections.ICollection.CopyTo(System.Array array,int arrayIndex)
343{
344m_arrColumnHearderMapping.CopyTo(array,arrayIndex);
345}
346
347#endregion
348
349public int Count
350{
351get
352{
353return m_arrColumnHearderMapping.Count;
354}
355}
356
357public ColumnHeaderMapping this[int index]
358{
359get
360{
361return (ColumnHeaderMapping)m_arrColumnHearderMapping[index];
362}
363}
364
365public void Add(ColumnHeader columnHeader,string mappingField)
366{
367m_arrColumnHearderMapping.Add(new ColumnHeaderMapping(columnHeader,mappingField));
368}
369
370public void Add(ColumnHeaderMapping ColumnHeaderMapping)
371{
372m_arrColumnHearderMapping.Add(ColumnHeaderMapping);
373}
374
375public void AddRange(ColumnHeaderMapping[] columnHeadMappings)
376{
377m_arrColumnHearderMapping.AddRange(columnHeadMappings);
378}
379
380public void AddRange(ColumnHeader[] columnHeaders,string[] mappingFields)
381{
382if (columnHeaders.Length != mappingFields.Length)
383{
384return;
385}
386for(int i=0;i<mappingFields.Length;i++)
387{
388m_arrColumnHearderMapping.Add(new ColumnHeaderMapping(columnHeaders[i],mappingFields[i]));
389}
390}
391
392public void Remove(ColumnHeaderMapping ColumnHeaderMapping)
393{
394m_arrColumnHearderMapping.Remove(ColumnHeaderMapping);
395}
396
397public void Clear()
398{
399m_arrColumnHearderMapping.Clear();
400}
401
402public int IndexOf(ColumnHeaderMapping columnHeaderMapping)
403{
404return m_arrColumnHearderMapping.IndexOf(columnHeaderMapping);
405}
406
407public void Insert(int index,ColumnHeaderMapping columnHeaderMapping)
408{
409m_arrColumnHearderMapping.Insert(index,columnHeaderMapping);
410}
411
412public void InsertRange(int index,ColumnHeaderMapping[] columnHeaderMappings)
413{
414m_arrColumnHearderMapping.InsertRange(index,columnHeaderMappings);
415}
416
417public bool Contains(ColumnHeaderMapping columnHeader)
418{
419return m_arrColumnHearderMapping.Contains(columnHeader);
420}
421
422public System.Collections.IEnumerator GetEnumerator()
423{
424return m_arrColumnHearderMapping.GetEnumerator();
425}
426}
427#endregion
428
429#region 列表标头映射类,实现列表标头同数据库表字段的映射,定义列表标头在排序时使用的数据类型
430
431[TypeConverterAttribute(typeof(ColumnHeaderMappingConvert))]
432public class ColumnHeaderMapping
433{
434private ColumnHeader m_objColumnHeader;
435private string m_strMappingField;
436private SortType m_enmSortType;
437
438public ColumnHeaderMapping()
439{
440m_objColumnHeader = new ColumnHeader();
441m_strMappingField = "";
442}
443
444public ColumnHeaderMapping(ColumnHeader columnHeader,string mappingField)
445{
446m_objColumnHeader = columnHeader;
447m_strMappingField = mappingField;
448}
449
450[
451CategoryAttribute("杂项"),
452BrowsableAttribute(true),
453DescriptionAttribute("列表标头"),
454DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content),
455DefaultValueAttribute(null)
456]
457public ColumnHeader ColumnHeader
458{
459get
460{
461return m_objColumnHeader;
462}
463set
464{
465m_objColumnHeader = value;
466}
467}
468
469[
470CategoryAttribute("杂项"),
471BrowsableAttribute(true),
472DescriptionAttribute("映射字段"),
473DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible),
474DefaultValueAttribute("")
475]
476public string MappingField
477{
478get
479{
480return m_strMappingField;
481}
482set
483{
484m_strMappingField = value;
485}
486}
487
488[
489CategoryAttribute("杂项"),
490BrowsableAttribute(true),
491DescriptionAttribute("列表标头类型"),
492DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible),
493DefaultValueAttribute(SortType.String)
494]
495public SortType SortType
496{
497get
498{
499return m_enmSortType;
500}
501set
502{
503m_enmSortType = value;
504}
505}
506}
507#endregion
508
509#region 对ColumnHeaderMapping进行转换,实现ColumnHeaderMapping类在IDE中的序列化
510
511public class ColumnHeaderMappingConvert : TypeConverter
512{
513public ColumnHeaderMappingConvert()
514{
515}
516
517public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
518{
519if (destinationType == typeof(InstanceDescriptor))
520{
521return true;
522}
523
524return base.CanConvertTo(context, destinationType);
525}
526
527public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
528{
529if (value is ColumnHeaderMapping)
530{
531if (destinationType == typeof(InstanceDescriptor))
532{
533object[] properites = new object[2];
534Type[] types = new Type[2];
535
536ColumnHeaderMapping chm = (ColumnHeaderMapping)value;
537
538types[0] = typeof(ColumnHeader);
539properites[0] = chm.ColumnHeader ;
540
541types[1] = typeof(string);
542properites[1] = chm.MappingField ;
543
544ConstructorInfo ci = typeof(ColumnHeaderMapping).GetConstructor(types);
545return new InstanceDescriptor(ci,properites);
546}
547}
548return base.ConvertTo(context, culture, value, destinationType);
549}
550}
551#endregion
552
553#region 继承列表标头集合类(由于继承列表标头集合类后,新增的列表标头不能显示在列表中,所以已经注释,暂时没有使用)
554// public class ColumnHeaderCollection : ListView.ColumnHeaderCollection
555// {
556// private ListView m_lvwBase = null;
557//
558// public ColumnHeaderCollection(CommonFrame.OCX.ListView listView) : base(listView)
559// {
560// m_lvwBase = listView;
561// }
562//
563// public void Remove(ColumnHeader item)
564// {
565// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
566// {
567// throw new Exception("已经设置了DataSource,不允许删除项目");
568// }
569// else
570// {
571// base.Remove(item);
572// }
573// }
574//
575// public void RemoveAt(int index)
576// {
577// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
578// {
579// throw new Exception("已经设置了DataSource,不允许删除项目");
580// }
581// else
582// {
583// base.RemoveAt(index);
584//
585// }
586// }
587//
588// public int Add(ColumnHeader value)
589// {
590// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
591// {
592// throw new Exception("已经设置了DataSource,不允许添加项目");
593// }
594// else
595// {
596// return base.Add(value);
597// }
598// }
599//
600// public ColumnHeader Add(string text,int width,HorizontalAlignment textAlign)
601// {
602// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
603// {
604// throw new Exception("已经设置了DataSource,不允许添加项目");
605// }
606// else
607// {
608// return base.Add(text,width,textAlign);
609// }
610// }
611//
612// public void Insert(int index,ColumnHeader item)
613// {
614// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
615// {
616// throw new Exception("已经设置了DataSource,不允许添加项目");
617// }
618// else
619// {
620// base.Insert(index,item);
621// }
622// }
623//
624// public void Insert(int index,string text,int width,HorizontalAlignment textAlign)
625// {
626// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
627// {
628// throw new Exception("已经设置了DataSource,不允许添加项目");
629// }
630// else
631// {
632// base.Insert(index,text,width,textAlign);
633// }
634// }
635//
636// public void AddRange(ColumnHeader[] values)
637// {
638// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
639// {
640// throw new Exception("已经设置了DataSource,不允许添加项目");
641// }
642// else
643// {
644// base.AddRange(values);
645// }
646// }
647//
648// public void Clear()
649// {
650// if ((m_lvwBase.DataSource != null) && (m_lvwBase.m_blnModifiedItem == false))
651// {
652// throw new Exception("已经设置了DataSource,不允许清空项目");
653// }
654// else
655// {
656// base.Clear();
657// }
658// }
659//
660// public ColumnHeader this[int index]
661// {
662// get
663// {
664// return base[index];
665// }
666// }
667// }
668#endregion
669}</introwcount;i++)>