[英]How to assign a value to a cell of DataGridView?
我正在尝试设置第二个值的单元格DataGridView
的,特别是作为happean ComboBox
类的数据绑定,例如:
myComboBox.DisplayMember = "NAME"
myComboBox.ValueMember = "id_value"
您如何看到我显示了名称,但是当我执行myComboBox.SelectedValue
我获得了所选值的ID。 我想知道如何在DataGridView上实现相同的目标。 实际上,我只能添加这样的值:
myDataGrid.Rows.Add({"TEST"})
如上例所示,如何为行添加值?
一种可能是将数据加载到DataTable中,添加BindingSource,将BindingSource的数据源设置为DataTable,然后将BindingSource用作DataGridView的数据源。
从这里开始,我们无法显示一个或多个列,其中隐藏列将像ComboBox DisplayMember和ValueMember一样被使用。 下面的示例是一个简单的演示,您可以尝试一下。 请注意,从逐行加载DataGridView到下面建议的方法几乎没有开销。
我故意使事情简单化,如果需要使用比行延续字符早的版本或将行拆分成一行,则所有代码都依赖于Framework 3.5或更高版本。
''' <summary>
''' Requires 1 DataGridView, 1 TextBox, 2 Buttons
''' </summary>
''' <remarks></remarks>
Public Class Form1
Private bs As New BindingSource
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bs.DataSource = MimicLoadingData()
DataGridView1.DataSource = bs
End Sub
''' <summary>
''' Mimic loading data from a data source be it
''' a text file, excel or database etc.
''' </summary>
''' <returns></returns>
''' <remarks>
''' Set ColumnMapping to Hidden so they are
''' not shown in the DataGridView
''' </remarks>
Private Function MimicLoadingData() As DataTable
Dim dt As New DataTable
dt.Columns.Add(New DataColumn With
{
.ColumnName = "ID",
.AutoIncrement = True,
.DataType = GetType(Integer),
.ColumnMapping = MappingType.Hidden
}
)
dt.Columns.Add(New DataColumn With
{
.ColumnName = "Name",
.DataType = GetType(String)
}
)
dt.Columns.Add(New DataColumn With
{
.ColumnName = "IdName",
.DataType = GetType(Integer),
.ColumnMapping = MappingType.Hidden
}
)
dt.Rows.Add(New Object() {Nothing, "Karen", 34})
dt.Rows.Add(New Object() {Nothing, "Bob", 100})
dt.Rows.Add(New Object() {Nothing, "Anne", 50})
Return dt
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If bs.Current IsNot Nothing Then
MessageBox.Show(
CType(bs.Current, DataRowView).Row.Field(Of Integer)("IdName").ToString)
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If bs.Current IsNot Nothing Then
Dim value As Integer = 0
If Integer.TryParse(TextBox1.Text, value) Then
CType(bs.Current, DataRowView).Row.SetField(Of Integer)("IdName", value)
End If
End If
End Sub
End Class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.