C# Telerik RAD控件,如何将(GridViewRowInfo的)列表设置为RadGridView数据源?
我正在寻找一个C#或VB.NET解决方案C# Telerik RAD控件,如何将(GridViewRowInfo的)列表设置为RadGridView数据源?,c#,.net,vb.net,telerik,telerik-grid,C#,.net,Vb.net,Telerik,Telerik Grid,我正在寻找一个C#或VB.NET解决方案 更新: 我有一个RadGridView,其中有5个由我手动定义的列: AutoGenerateColumns属性设置为False 当我安装一个GridViewRowInfoclass时,我可以为这个对象设置很多属性: Dim MyRow As New GridViewRowInfo(Me.RadGridView1.MasterView) With MyRow .Cells(0).Value = "My Value for Column 1"
更新: 我有一个RadGridView,其中有5个由我手动定义的列:
AutoGenerateColumns
属性设置为False
当我安装一个GridViewRowInfo
class时,我可以为这个对象设置很多属性:
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)
那么,我的意图是将这些行的集合设置为数据源
,例如:
RadGridView1.DataSource = MyRows
所以首先要注意的是,我设置了一个GridViewRowInfo
集合,并且为每个GridViewRowInfo
设置了不同的属性,这些属性在添加数据源集合时应该生效,第二件事是,如果我更新数据源集合以删除或添加更多行,那么RadGridView
控件应该自动执行更新,而无需更多干预…不是吗
问题是这些事情都会发生:
如上图所示,当我将列表(GridViewRowInfo)
设置为我的数据源
时,它只会添加空行,并且如果我之前设置了其中一个GridViewRowInfo
的高度
属性,则在设置数据源时不会生效:
我希望以更直接、更不奢侈的方式执行此操作,我的意思是,我不希望创建一个自定义类,以便能够将该类设置为DataSource
,并复制所有公开GridViewRowInfo
类或自定义类中如此棘手的内容的属性,因为如果<代码> RADGRIDVIEW/COD>公开了一个好的<代码> GridViewRowInfo < /代码>类,我需要我为什么要考虑创建一个自定义类来设置它,我的<代码>数据源< /代码>?< /p>
如果我对这些概念没有好的想法或理解错误,请澄清它们,我知道数据源的使用不应该以这种方式使用(或者我认为是这样),但我真的希望这样做,以简化事情,更直接地使用数据源(和每行属性),而不是控件本身
我还尝试了中的官方示例(但只是使用了列表(字符串)
),但它只是在gridview中的列单元格中添加了一个名为“Length”(带有数字数据)的新列。RadGridView支持两种填充数据的方式:
- 您可以在其中手动将列和行添加到网格(就像您所做的那样)
- 其中,您将控件的数据源属性设置为支持的类型之一,即
- 用于简单类型或自定义对象李>
- 用于简单类型或自定义对象李>
- `实现李>
- 或来自各种提供商(MS SQL、Oracle、Access、,
任何可通过OleDb访问的内容)
因此,无法将网格绑定到GridViewRowInfo集合(因为您将只看到GridViewRowInfo类型属性)。您应该继续像现在这样手动添加,或者您可以使用数据填充DataTable,并将其设置为网格的数据源
*所有链接和信息都来自Telerik UI for WinForms文档,如果我对这些概念没有好的想法或误解,请澄清它们
你把显示什么和如何显示它们混淆了,这是两件截然不同的事情。从他们的在线指南:RadGridView支持标准的Windows窗体数据绑定模型
,也就是说,数据源为控件提供数据,而不是表示信息
公共类MyObject
公共属性MyInt()为整数
公共属性MyString()作为字符串
...
Dim myList作为新列表(MyObject)()
myList.Add(新的MyObject(1,“户外”))
添加(新的MyObject(2,“硬件”))
添加(新的MyObject(3,“工具”))
添加(新的MyObject(4,“书籍”))
添加(新的MyObject(5,“设备”))
RadGridView1.DataSource=myList
结果:
注意控件如何自动从自定义类中提取属性名:MyInt
和MyString
成为列名。这是网格从数据源获取的唯一与布局(如何)相关的内容,并且只有当AutoGenerateColumns
为真时(否则它们将为空)。如果为False,则通过布置列来控制它
现在看看您正在尝试什么:
与MyRow
.Cells(0).Value=“第1列的我的值”
.Cells(1).Value=“第2列的我的值”
...
.高度=50
.Tag=新对象
.IsSelected=True
作为一个数据源,它有很多问题。主要来说,您不是为单元格提供数据,而是为单元格提供单元格中的数据。您的方法混合了未绑定方法(显式指定每个单元格中的内容)和绑定到数据源的方法
但是,它如何知道值是一个数据显示项呢?如何知道钻取单元格集合以查找值
?如何知道值
是数据,而标记
不是?如何知道不尝试将高度
显示为列数据?仅仅因为名称与控件的属性名称匹配
如果myObject
碰巧有一个与我的类相关的Height
属性,会发生什么?您希望控件将其解释为控件布局信息,但世界其他地方都希望患者的