首页 > 解决方案 > 将值从 datagridview 转换为文本框

问题描述

我的代码在下面,我无法从数据表中获取值以显示在主窗体的文本框中。我最近意识到 DataGridView 与 DataTable 不同。我认为这让我更接近了。我最初在获取特定索引时遇到问题,因为数据表不能那样工作。现在我正在使用 datagridview,我觉得我几乎在那里,但缺少一些愚蠢的东西。

我的代码

    private void dt_SelectionChanged(object sender, EventArgs e)
        {
            DataGridView dgv = new DataGridView();
            dgv.DataSource = dt;

            if (dgv.SelectedCells.Count > 0)
            {
                active_Description.Text = 
                Convert.ToString(dgv.CurrentRow.Cells["Description"].Value);
                active_Cost.Text = Convert.ToString(dgv.CurrentRow.Cells["Cost"].Value);
                active_Diameter.Text = Convert.ToString(dgv.CurrentRow.Cells["Diameter"].Value);
                active_Last_Used.Text = Convert.ToString(dgv.CurrentRow.Cells["CareTaker"].Value);
                active_Location.Text = Convert.ToString(dgv.CurrentRow.Cells["Location"].Value);
                active_OAL.Text = Convert.ToString(dgv.CurrentRow.Cells["OAL"].Value);
                active_Vendor.Text = Convert.ToString(dgv.CurrentRow.Cells["Vendor"].Value);
            }

        }

标签: c#datatabledatagridviewselectionchanged

解决方案


真的; DataGridView 是一种以表格方式显示数据的 UI 设备,类似于 Excel 的显示方式。DataTable 是一种以表格方式存储数据的设备。如果您有要存储的数据,则将其放入数据表中,并且如果您想显示它,您可以告诉 datagridview 将该表用作数据源,但它们是非常不同的东西

DataGridView 一次显示多行数据,而文本框只能显示一个值。通常,当我们混合使用这两者时,我们最终会使用 DGV 作为导航设备(它显示例如 20 行,我们可以单击其中一个使其成为“当前行”)并且任何也使用相同数据源的文本框通常会显示当前行数据

您尝试手动组合的代码可以使用数据绑定更简单地完成,其中 DataGridView 和 TextBoxes 都绑定到相同的 BindingSource;BS 负责维护“当前行”的概念

为了让您的生活更轻松,请按照以下步骤操作:

  • 向您的项目添加一个新文件,类型为 DataSet
  • 打开数据集,右键单击表面并添加一个数据表,将其命名为产品(您看起来像是在制作某种与产品相关的系统)
  • 右键单击表格并添加一个新列,将其命名为描述
  • 为成本添加另一列(输入小数?)直径(整数?小数?)等
  • 切换到您的表单设计器
  • 打开数据源窗口(查看菜单、其他窗口) - 如果您使用的是 .net 核心,它目前无法正常工作,所以希望您使用的是框架。还有其他方法可以在核心上执行此过程,这更令人讨厌
  • 展开数据源中的所有节点
  • 您可以看到父节点 Product 带有一个小网格图标。它有孩子的图标看起来更像文本框等
  • 将产品节点拖到表单上;出现一个 DataGridView,以及一个数据集、绑定源和导航器(在底部托盘中)
  • 将一些子节点也拖到表单中,出现文本框,但您会注意到它们重用了现有的产品绑定源
  • 如果您检查 DGV 和文本框,您会发现它们将数据源设置为绑定源,并且绑定源具有数据集的数据源(以及 products 表的数据成员)

这就是您真正需要做的所有事情;您可以将一些代码放入您的构造函数中,用数据填充您的数据集,或者您可以在运行时执行此操作。现在在运行时执行;运行应用程序,输入 3 行左右的数据,然后在它们之间上下点击;您会注意到文本框的变化取决于 DGV 中的活动行

如果您想查看 Visual Studio 编写的用于连接所有这些的代码,请查看 Designer.cs 文件

如果您从数据库中获取这些数据,请查看我对 Michal 的回答-实际上它与上面发布的内容相关;Michal 从数据库中引用数据,所以很多答案都是为了将​​数据拉出并放入数据集中,在 DGV 和文本框中显示,然后将其发送回,但屏幕截图和其他有关显示和操作的相关部分数据(在数据集中)也会帮助你


推荐阅读