DataColumnPropertyDescriptor.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //------------------------------------------------------------------------------
  2. // <copyright file="DataColumnPropertyDescriptor.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">[....]</owner>
  6. // <owner current="true" primary="false">[....]</owner>
  7. // <owner current="false" primary="false">[....]</owner>
  8. //------------------------------------------------------------------------------
  9. namespace System.Data {
  10. using System.Diagnostics;
  11. using System.ComponentModel;
  12. using System.Data.Common;
  13. internal sealed class DataColumnPropertyDescriptor : PropertyDescriptor {
  14. DataColumn column;
  15. internal DataColumnPropertyDescriptor(DataColumn dataColumn) : base(dataColumn.ColumnName, null) {
  16. this.column = dataColumn;
  17. }
  18. public override AttributeCollection Attributes {
  19. get {
  20. if (typeof(System.Collections.IList).IsAssignableFrom(this.PropertyType)) {
  21. Attribute[] attrs = new Attribute[base.Attributes.Count + 1];
  22. base.Attributes.CopyTo(attrs, 0);
  23. // we don't want to show the columns which are of type IList in the designer
  24. attrs[attrs.Length - 1] = new ListBindableAttribute(false);
  25. return new AttributeCollection(attrs);
  26. } else {
  27. return base.Attributes;
  28. }
  29. }
  30. }
  31. internal DataColumn Column {
  32. get {
  33. return column;
  34. }
  35. }
  36. public override Type ComponentType {
  37. get {
  38. return typeof(DataRowView);
  39. }
  40. }
  41. public override bool IsReadOnly {
  42. get {
  43. return column.ReadOnly;
  44. }
  45. }
  46. public override Type PropertyType {
  47. get {
  48. return column.DataType;
  49. }
  50. }
  51. public override bool Equals(object other) {
  52. if (other is DataColumnPropertyDescriptor) {
  53. DataColumnPropertyDescriptor descriptor = (DataColumnPropertyDescriptor) other;
  54. return(descriptor.Column == Column);
  55. }
  56. return false;
  57. }
  58. public override Int32 GetHashCode() {
  59. return Column.GetHashCode();
  60. }
  61. public override bool CanResetValue(object component) {
  62. DataRowView dataRowView = (DataRowView) component;
  63. if (!column.IsSqlType)
  64. return (dataRowView.GetColumnValue(column) != DBNull.Value);
  65. return (!DataStorage.IsObjectNull(dataRowView.GetColumnValue(column)));
  66. }
  67. public override object GetValue(object component) {
  68. DataRowView dataRowView = (DataRowView) component;
  69. return dataRowView.GetColumnValue(column);
  70. }
  71. public override void ResetValue(object component) {
  72. DataRowView dataRowView = (DataRowView) component;
  73. dataRowView.SetColumnValue(column, DBNull.Value);// no need to ccheck for the col type and set Sql...Null!
  74. }
  75. public override void SetValue(object component, object value) {
  76. DataRowView dataRowView = (DataRowView) component;
  77. dataRowView.SetColumnValue(column, value);
  78. OnValueChanged(component, EventArgs.Empty);
  79. }
  80. public override bool ShouldSerializeValue(object component) {
  81. return false;
  82. }
  83. public override bool IsBrowsable {
  84. get {
  85. return (column.ColumnMapping == System.Data.MappingType.Hidden ? false : base.IsBrowsable);
  86. }
  87. }
  88. }
  89. }