我正在为此寻找C#或VB.NET解决方案。
更新:
我有一个带有5个manualy定义列的RadGridView:
AutoGenerateColumns
属性设置为False
。
当我设置GridViewRowInfo
类时,我可以为这个对象设置很多属性:
Dim MyRow As New GridViewRowInfo(Me.RadGridView1.MasterView)
With MyRow
.Cells(0).Value = "My Value for Column 1"
.Cells(1).Value = "My Value for Column 2"
.Cells(2).Value = "My Value for Column 3"
.Cells(3).Value = "My Value for Column 4"
.Cells(4).Value = "My Value for Column 5"
.Height = 50
.Tag = New Object
.IsSelected = True
End With
当我添加该行时,我之前为该行设置的属性会立即生效:
RadGridView1.Rows.Add(MyRow)
如果我想添加这些行的集合,我可以设置一个实现GridViewRowInfo
接口的新IList
集合:
Dim MyRows As New List(Of GridViewRowInfo)
MyRows.Add(MyRow1)
MyRows.Add(MyRow2)
MyRows.Add(MyRow3)
RadGridView1.Rows.AddRange(MyRows.ToArray)
好吧,我的目的是将这些行的集合设置为DataSource
,例如:
RadGridView1.DataSource = MyRows
首先要注意的是,我已经设置了GridViewRowInfo
的集合,并且我为每个GridViewRowInfo
设置了不同的属性,这些属性应该在添加数据源时生效 - 集合,第二件事是,如果我更新数据源集合以删除或添加更多行,那么RadGridView
控件应该自动执行更新而不需要更多干预......不是吗?
问题是任何这些事情都会发生:
正如您在上图中看到的那样,当我将List(of GridViewRowInfo)
设置为DataSource
时,它只会添加空行,如果我之前已经设置了Height
属性设置GridViewRowInfo
:
Datasource
的效果不会生效
我想以更直接的方式和更不奢侈的方式执行此操作,我的意思是我不想创建自定义类以便能够将该类设置为DataSource
,并且再现所有公开GridViewRowInfo
类的属性或在我的自定义类中如此棘手的东西,导致如果RadGridView
公开了一个好的GridViewRowInfo
类,我需要的就是为什么我应该考虑创建一个自定义类来将其设置为我的DataSource
?。
如果我对这些概念没有好主意或误解,请告诉我他们,我知道不应该以这种方式使用数据源(或者我认为是这样),但我真的会这样做喜欢这样做以简化事情,直接使用数据源(和每个行属性)而不是控件本身。
此外,我已尝试this link中的官方示例(但仅使用list(Of String)
代替),但它只是在我的gridview中添加了一个名为' Length&#39的新列; (在该列单元格中使用数字数据。
答案 0 :(得分:2)
RadGridView支持两种填充数据的方法:
因此,您无法将网格绑定到GridViewRowInfos的集合(因为您只能看到GridViewRowInfo类型属性)。您应该继续手动添加现在,或者您可以使用数据填充DataTable并将其设置为网格的DataSource。
*所有链接和信息均来自Telerik UI for WinForms文档
答案 1 :(得分:1)
If I don't have a good idea or a missunderstanding of these concepts please clarify them
你很困惑要显示什么,如何显示它们是两个非常不同的东西。从他们的在线指南:The RadGridView supports the standard Windows Forms data binding model
,也就是说数据源为控件提供数据,而不是演示信息。
Public Class MyObject
Public Property MyInt() As Integer
Public Property MyString() As String
...
Dim myList As New List(Of MyObject)()
myList.Add(New MyObject(1, "Outdoor"))
myList.Add(New MyObject(2, "Hardware"))
myList.Add(New MyObject(3, "Tools"))
myList.Add(New MyObject(4, "Books"))
myList.Add(New MyObject(5, "Appliances"))
RadGridView1.DataSource = myList
结果:
请注意控件如何自动从自定义类中选取属性名称:MyInt
和MyString
成为列名。这是网格从DataSource中获取的唯一布局(HOW)相关的东西,仅当AutoGenerateColumns
为True时(否则它们将为空)。如果为False,则通过布置列来控制它。
现在看看你在尝试什么:
With MyRow
.Cells(0).Value = "My Value for Column 1"
.Cells(1).Value = "My Value for Column 2"
...
.Height = 50
.Tag = New Object
.IsSelected = True
作为DataSource,这有很多问题。主要是,您不是为单元格提供数据,而是为单元格提供单元格中的数据。您的方法混合了未绑定的方法(明确指定要进入每个单元格的内容),并绑定到数据源。
但是,如何知道Value
是一个数据显示项?如何知道钻入单元格集合以查找Value
?如何知道Value
是数据但Tag
不是?怎么知道不试图将Height
显示为列数据?只是因为名称与控件的属性名称匹配?
如果偶然myObject
有Height
属性与我班级有关,会发生什么? 您希望控件将其解释为控件布局信息,但世界其他地方希望患者的身高,建筑物高度或地理位置高度显示为数据< / em>的。我们必须设计具有控件中找不到的唯一名称的类,以便显示我们的数据并防止控件呈现根据 data 和DataSource中的属性名称进行异想天开的更改。
GridviewRowInfo
顾名思义提供了行信息,而非行数据。您的列表中存在大量的演示文稿信息,但它并不像您想要的那样工作,因为控件不使用数据源来获取演示文稿信息。
该控件包括Four ways to customize RadGridView appearance:主题,UI编辑器,事件和条件格式。
还有其他元素,例如GridTableElement
和GridTableBodyElement
。实际上,这些元素包含一些控制网格单元格和行的行为和外观的属性,例如GridTableElement.RowHeight
,RowSpacing
等。
在DataSource中传递的数据不会影响演示文稿(除了AutoGenerateColumns
的列名,但这是该属性的函数,而不是数据源。)