【问题标题】:C#: grabbing values from a DataGridViewC#:从 DataGridView 中获取值
【发布时间】:2011-02-25 19:16:58
【问题描述】:

我有一个包含数据网格视图的表单。基本上,这种形式用于从数据库中查询客户端。用户进行搜索后,结果将显示在 DGV 上。我希望用户能够单击他们想要的客户端并能够在另一个表单上查看他们的信息。当新客户添加到数据库中时,它将被赋予一个唯一的 ID,因此我将在实际打开包含信息的表单时使用它。但是如何通过单击该行从 DGV 中检索该 ID?

提前致谢。

【问题讨论】:

  • 对不起大家我忘了提一件事。首先按客户名称搜索客户。用户将在文本框中键入名称并单击搜索按钮。然后按名称查询数据库。然后将检索到的客户端列在 DGV 中。从那里,用户选择他们正在寻找的客户,并弹出带有他们信息的表单。很抱歉造成混乱
  • 那么...您的数据网格视图中是否有一个 ID 列(可见或隐藏)?

标签: c# .net winforms datagridview


【解决方案1】:

将 Unique-ID 设置为 ItemCollection 中的标记对象。

试试这个:

DataGridView.Items[n].Tag = (object)YOUR_UNIQUE_ID

(当然,如果你想要你的 id,同样的命令)

【讨论】:

    【解决方案2】:

    配置网格,将 SelectionMode 属性设置为 FullRowSelect。

    我想你使用类似的东西将数据加载到 datagridview 中

    GrdClients.DataSource = ListsOfClients
    

    因此,您需要处理网格的 CellMouseDoubleClick 事件。正如您之前将 SelectionMode 属性配置为 FullRowSelect 一样,您现在可以提取选定的客户端

    Client ClientElement = GrdRequests.SelectedRows[0].DataBoundItem
    ShowClientForm(ClientElement.Id)
    

    【讨论】:

      【解决方案3】:

      使用CType,您可以从DataGridView 中获取行的主键值。下面是一个例子:

      Name = CType(dgview.FindControl("lblname"),Label).Text
      

      在检索到上述值后,您编写一个查询以使用该键进行搜索。从数据库中获取ID值后,再次绑定DataGridView,显示搜索结果。

      【讨论】:

      • 请注意,CType 仅在 VB.NET 中可用(但即使在那里,您应该更喜欢 DirectCast)。问题是关于 C#,这将需要不同风格的演员表。
      【解决方案4】:

      首先,您必须确保 DGV 包含 ID 列(您可以通过将 Visible 属性设置为 false 来隐藏它)
      然后,您必须处理 DGV.CellClick 事件:
      (对不起VB,从实际代码中复制粘贴)

      If e.RowIndex < 0 Then Exit Sub
      Dim id as integer = dgv.Item(0, e.RowIndex).Value

      其中 0 是包含您的客户 ID 的列的索引。

      【讨论】:

      • dvg.item 有一个使用列名而不是索引的重载。尽可能使用列名。
      猜你喜欢
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 2020-05-06
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多