将值从 datagridview 转换为文本框

Converting value from datagridview to a text box

我的代码如下,我一生无法从数据 table 中获取值以显示在主窗体的文本框中。我最近意识到 DataGridView 与 DataTable 不同。我认为这让我更接近了。我最初在访问特定索引时遇到问题,因为 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);
            }

        }

是的; DataGridView 是一种 UI 设备,它 以表格形式显示 数据,类似于 Excel 的显示方式。 DataTable 是一种以表格形式存储 数据的设备。如果你有数据要存储,你把它放在数据 table 中,如果你想显示它,你可以告诉数据网格视图使用 table 作为数据源,但它们是非常不同的东西

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

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

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

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

这就是您真正需要做的;您可以将一些代码放入您的构造函数中,用数据填充您的数据集,或者您可以在 运行 时间完成。现在在 运行 时间进行; 运行 应用程序,输入3行左右的数据,然后在它们之间上下点击;您会注意到文本框会根据 DGV

中的活动行而变化

如果您想查看 visual studio 编写的连接所有这些的代码,它在 Designer.cs 文件中

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