いいえ、これは browsable 属性を使用して可能だとは思いません。ただし、ICustomTypeDescriptorインターフェイスを実装することで、DataGridView がバインドするプロパティを制御できます。
モデル
C#:
public class Foo : ICustomTypeDescriptor
{
public string P1 { get; set; }
public string P2 { get; set; }
public string P3 { get; set; }
public string P4 { get; set; }
public string P5 { get; set; }
public string P6 { get; set; }
public string P7 { get; set; }
public string P8 { get; set; }
public string P9 { get; set; }
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)
{
var properties = new[] { "P1", "P3", "P7" };
var descriptors = TypeDescriptor
.GetProperties(typeof(Foo))
.Cast<PropertyDescriptor>()
.Where(p => properties.Any(s => s == p.Name))
.ToArray();
return new PropertyDescriptorCollection(descriptors);
}
AttributeCollection ICustomTypeDescriptor.GetAttributes()
{
return new AttributeCollection(null);
}
string ICustomTypeDescriptor.GetClassName()
{
return null;
}
string ICustomTypeDescriptor.GetComponentName()
{
return null;
}
TypeConverter ICustomTypeDescriptor.GetConverter()
{
return null;
}
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
{
return null;
}
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
{
return null;
}
object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
{
return null;
}
EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
{
return new EventDescriptorCollection(null);
}
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
{
return new EventDescriptorCollection(null);
}
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
{
return ((ICustomTypeDescriptor)this).GetProperties(null);
}
object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
{
return this;
}
}
VB.Net:
Public Class Foo
Implements ICustomTypeDescriptor
Public Property P1 As String
Public Property P2 As String
Public Property P3 As String
Public Property P4 As String
Public Property P5 As String
Public Property P6 As String
Public Property P7 As String
Public Property P8 As String
Public Property P9 As String
Private Function GetProperties(attributes() As Attribute) As PropertyDescriptorCollection Implements ICustomTypeDescriptor.GetProperties
Dim properties = {"P1", "P3", "P7"}
Dim descriptors = TypeDescriptor _
.GetProperties(GetType(Foo)) _
.Cast(Of PropertyDescriptor) _
.Where(Function(p) properties.Any(Function(s) s = p.Name)) _
.ToArray()
Return New PropertyDescriptorCollection(descriptors)
End Function
Private Function GetAttributes() As AttributeCollection Implements ICustomTypeDescriptor.GetAttributes
Return New AttributeCollection(Nothing)
End Function
Private Function GetClassName() As String Implements ICustomTypeDescriptor.GetClassName
Return Nothing
End Function
Private Function GetComponentName() As String Implements ICustomTypeDescriptor.GetComponentName
Return Nothing
End Function
Private Function GetConverter() As TypeConverter Implements ICustomTypeDescriptor.GetConverter
Return Nothing
End Function
Private Function GetDefaultEvent() As EventDescriptor Implements ICustomTypeDescriptor.GetDefaultEvent
Return Nothing
End Function
Private Function GetDefaultProperty() As PropertyDescriptor Implements ICustomTypeDescriptor.GetDefaultProperty
Return Nothing
End Function
Private Function GetEditor(editorBaseType As Type) As Object Implements ICustomTypeDescriptor.GetEditor
Return Nothing
End Function
Private Function GetEvents() As EventDescriptorCollection Implements ICustomTypeDescriptor.GetEvents
Return New EventDescriptorCollection(Nothing)
End Function
Private Function GetEvents(attributes() As Attribute) As EventDescriptorCollection Implements ICustomTypeDescriptor.GetEvents
Return New EventDescriptorCollection(Nothing)
End Function
Private Function GetProperties() As PropertyDescriptorCollection Implements ICustomTypeDescriptor.GetProperties
Return DirectCast(Me, ICustomTypeDescriptor).GetProperties(Nothing)
End Function
Private Function GetPropertyOwner(pd As PropertyDescriptor) As Object Implements ICustomTypeDescriptor.GetPropertyOwner
Return Me
End Function
End Class
データグリッドビュー:
C#:
var list = new List<Foo>();
list.Add(new Foo());
list.Add(new Foo());
list.Add(new Foo());
this.dataGridView1.DataSource = list;
VB.Net:
Dim list As New List(Of Foo)
list.Add(New Foo())
list.Add(New Foo())
list.Add(New Foo())
Me.DataGridView1.DataSource = list

プロパティ グリッド:
C#:
this.propertyGrid1.SelectedObject = new Foo();
VB.Net:
Me.PropertyGrid1.SelectedObject = New Foo()