如何使用自定义类数据源在datagridview单元格中显示结构属性

编程入门 行业动态 更新时间:2024-10-11 21:25:58
本文介绍了如何使用自定义类数据源在datagridview单元格中显示结构属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

嗨我这个代码里面有 - 一个列表(类)(它里面有一个结构的类) - a datagridview它绑定到类 当我运行代码时,我可以看到第一列和第二列单元格正确填充。 但是在第三列单元格填充'Form1.schoolSubjects',但我想看看属性'平均'。 当我用鼠标移动到第三列的单元格时,我想要看到被保留的'toString'值。 我看一看互联网,我发现帮助可以来自 System.ComponentModel.DisplayName 或者来自 System.ComponentModel.ICustomTypeDescriptor 但我没有'理解如何。 PS我知道有一种方法可以让它在运行时更改单元格值(即修改cellPaint事件的输出),但我想直接绑定类或结构代码的正确输出。 以下是代码

公共 类 Form1 Dim dgv As DataGridView Dim classe 作为列表( 学生) 私有 Sub Form1_Load(发件人 As 对象,e As EventArgs)句柄 MyBase .Load Me .Size = 新大小( 400 , 200 ) dgv = 新 DataGridView dgv.Size = 新大小(我 .Size.Width - 10 ,我 .Size.Height - 20 ) dgv.Location = 新点( 0 , 0 ) 我 .Controls.Add(dgv) classe = 新列表( 学生)来自{新学生( John, Brown,新 schoolSubjects( 4 , 10 , 8 , 5 )),新学生( James, Morrison,新 schoolSubjects( 3 , 4 , 10 , 2 ))} dgv.DataSource = classe End Sub 结束 Class 公共 班级学生 Sub 新( ByVal StudentFirstName 作为 字符串, ByVal StudentSecondName As 字符串, ByVal StudentSubjects As schoolSubjects) firstName = StudentFirstName secondName = StudentSecondName Subjects = New schoolSubjects(StudentSubjects.Mathematics,StudentSubjects.English,StudentSubjects。 ModernLanguage,StudentSubjects.Science) 结束 Sub 公开 属性 firstName 作为 字符串 公共 属性 secondName 正如 字符串 公共 属性主题作为 schoolSubjects 结束 类 公共 结构 schoolSubjects Sub 新( ByVal MathematicsVote As 整数, ByVal EnglishVote As 整数, ByVal LanguageVote 作为 整数, ByVal ScienceVote 作为 整数)数学=数学投票英语=英语投票 ModernLanguage =语言投票科学=科学投资平均=(数学+英语+现代语言+科学)/ 4 tostring = 字符串 .Concat( 数学:,Mathematics.ToString,vbCrLf,_ English: ,English.ToString,vbCrLf,_ ModernLanguage:, ModernLanguage.ToString,vbCrLf,_ 科学:,Science.ToString) 结束 Sub 公共 属性数学作为 整数 公共 属性英语 As 整数 公共 属性 ModernLanguage 作为 整数 公共 属性科学作为 整数 公共 属性平均作为 整数 公共 阴影 Prope rty tostring 作为 字符串 结束 结构

任何解决方案? 我尝试了什么: 我试过了

< System.ComponentModel.DisplayName(Average) > 公共财产主题作为schoolSubjects

但我必须明白,如果这是正确的方法,如何设置它。

解决方案

我找到了解决方案。

< System.ComponentModel.Browsable( False )> 公开 属性主题作为 schoolSubjects 公共 ReadOnly 物业平均值作为 整数 获取 返回 Subjects.Average 结束 获取 结束 物业

不确定它是最好的,因为我已经: - 添加调用已存在的'主题的价值的'平均'属性.Average'属性 - '隐藏''主题'属性到DataGridView。 希望有人可以得到一个bett解决方案(只需绑定'Subjects.Average'属性的值)。

好的,我找到了我正在寻找的解决方案

公共 覆盖 功能 tostring()作为 字符串 返回 Average.ToString 结束 功能

对于toolTip,只需在dataGridViewCellMouseEnter中引发一个事件。

私有 Sub dgv_CellEnter(发件人作为 对象,e As DataGridViewCellEventArgs) 如果 e.RowIndex = -1 然后 退出 Sub 选择 案例 dgv.Columns(e.ColumnIndex).Name 案例 主题 dgv.Rows( e.RowIndex)。细胞( 2 )。ToolTipText = classe(e.RowIndex).Subjects.Details 结束 选择 结束 Sub

您可以存放物业(即细节)并称之为提升此事件的价值。 这是完整的结构。

公开 结构 schoolSubjects Sub 新( ByVal MathematicsVote 作为 整数, ByVal EnglishVote 作为 整数, ByVal LanguageVote 作为 整数, ByVal ScienceVote 作为 整数)数学=数学投票英语=英语投票 ModernLanguage = LanguageVote 科学=科学投资平均= Math.Round((数学+英语+ ModernLanguage + Science)/ 4 , 1 ) Details = String .Concat( 数学: ,Mathematics.ToString,vbCrLf,_ 英语:,英语.ToString,vbCrLf,_ ModernLanguage:,ModernLanguage.ToString,vbCrLf,_ 科学:,Science.ToString,vbCrLf,vbCrLf,_ 平均值:,Average.ToString) 结束 Sub 公共 属性数学 As 整数 公共 属性英语作为 整数 公共 属性 ModernLanguage 作为 整数 公共 属性科学作为 整数 公共 属性平均 As Double 公开 PROPERT y 详细信息作为 字符串 公开 覆盖 功能 tostring() As 字符串 返回 Average.ToString 结束 功能 结束 结构

Hi I've this code where there is - a list (of class) (the class it's with a structure inside) - a datagridview that it's binded to the class When i run the code i can see the first and second columns cell correctly filled. But in the third column the cell are filled with 'Form1.schoolSubjects', but i want to see the property 'Average'. And when i go with the mouse over the cells of the third column, i want to see the custmized 'toString' value. I've take a look over internet and i've found that an help can come from System.ComponentModel.DisplayName or from System.ComponentModel.ICustomTypeDescriptor But i haven't understand how. P.S. I know there is a way to get it changing the cells value at run time (i.e. modifing the output of the cellPaint Event), but i want to bind directly the right output from the class or structure codes. Here is the code

Public Class Form1 Dim dgv As DataGridView Dim classe As List(Of students) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Size = New Size(400, 200) dgv = New DataGridView dgv.Size = New Size(Me.Size.Width - 10, Me.Size.Height - 20) dgv.Location = New Point(0, 0) Me.Controls.Add(dgv) classe = New List(Of students) From {New students("John", "Brown", New schoolSubjects(4, 10, 8, 5)), New students("James", "Morrison", New schoolSubjects(3, 4, 10, 2))} dgv.DataSource = classe End Sub End Class Public Class students Sub New(ByVal StudentFirstName As String, ByVal StudentSecondName As String, ByVal StudentSubjects As schoolSubjects) firstName = StudentFirstName secondName = StudentSecondName Subjects = New schoolSubjects(StudentSubjects.Mathematics, StudentSubjects.English, StudentSubjects.ModernLanguage, StudentSubjects.Science) End Sub Public Property firstName As String Public Property secondName As String Public Property Subjects As schoolSubjects End Class Public Structure schoolSubjects Sub New(ByVal MathematicsVote As Integer, ByVal EnglishVote As Integer, ByVal LanguageVote As Integer, ByVal ScienceVote As Integer) Mathematics = MathematicsVote English = EnglishVote ModernLanguage = LanguageVote Science = ScienceVote Average = (Mathematics + English + ModernLanguage + Science) / 4 tostring = String.Concat("Mathematics: ", Mathematics.ToString, vbCrLf, _ "English: ", English.ToString, vbCrLf, _ "ModernLanguage: ", ModernLanguage.ToString, vbCrLf, _ "Science: ", Science.ToString) End Sub Public Property Mathematics As Integer Public Property English As Integer Public Property ModernLanguage As Integer Public Property Science As Integer Public Property Average As Integer Public Shadows Property tostring As String End Structure

Any solution? What I have tried: I've tried

<System.ComponentModel.DisplayName("Average")> Public Property Subjects As schoolSubjects

but i must understand if is the correct way and how to set it.

解决方案

I've found a solution.

<System.ComponentModel.Browsable(False)> Public Property Subjects As schoolSubjects Public ReadOnly Property Average As Integer Get Return Subjects.Average End Get End Property

Not sure it's the best, because i've: - add the property 'Average' that call to the value of the already existent 'Subjects.Average' property - 'hide' the 'Subjects' property to the DataGridView. Hope someone can get a better solution (just bind the value of the 'Subjects.Average' property).

Ok, i've found the solution i was looking for

Public Overrides Function tostring() As String Return Average.ToString End Function

And for the toolTip, just raise an event in the dataGridViewCellMouseEnter.

Private Sub dgv_CellEnter(sender As Object, e As DataGridViewCellEventArgs) If e.RowIndex = -1 Then Exit Sub Select Case dgv.Columns(e.ColumnIndex).Name Case "Subjects" dgv.Rows(e.RowIndex).Cells(2).ToolTipText = classe(e.RowIndex).Subjects.Details End Select End Sub

You can store a property (i.e. Details) and call the value raising this event. This is the full structure.

Public Structure schoolSubjects Sub New(ByVal MathematicsVote As Integer, ByVal EnglishVote As Integer, ByVal LanguageVote As Integer, ByVal ScienceVote As Integer) Mathematics = MathematicsVote English = EnglishVote ModernLanguage = LanguageVote Science = ScienceVote Average = Math.Round((Mathematics + English + ModernLanguage + Science) / 4, 1) Details = String.Concat("Mathematics: ", Mathematics.ToString, vbCrLf, _ "English: ", English.ToString, vbCrLf, _ "ModernLanguage: ", ModernLanguage.ToString, vbCrLf, _ "Science: ", Science.ToString, vbCrLf, vbCrLf, _ "Average: ", Average.ToString) End Sub Public Property Mathematics As Integer Public Property English As Integer Public Property ModernLanguage As Integer Public Property Science As Integer Public Property Average As Double Public Property Details As String Public Overrides Function tostring() As String Return Average.ToString End Function End Structure

更多推荐

如何使用自定义类数据源在datagridview单元格中显示结构属性

本文发布于:2023-06-03 23:44:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/485005.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据源   自定义   如何使用   单元格   属性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!