将行添加到具有现有列的 datagridview

2023-11-22

我有一个DataGridView有几个创建的列。我添加了一些行并且它们显示正确;但是,当我单击单元格时,内容就会消失。

我究竟做错了什么?

代码如下:

foreach (SaleItem item in this.Invoice.SaleItems)
{
    DataGridViewRow row = new DataGridViewRow();
    gridViewParts.Rows.Add(row);

    DataGridViewCell cellQuantity = new DataGridViewTextBoxCell();
    cellQuantity.Value = item.Quantity;
    row.Cells["colQuantity"] = cellQuantity;

    DataGridViewCell cellDescription = new DataGridViewTextBoxCell();
    cellDescription.Value = item.Part.Description;
    row.Cells["colDescription"] = cellDescription;

    DataGridViewCell cellCost = new DataGridViewTextBoxCell();
    cellCost.Value = item.Price;
    row.Cells["colUnitCost1"] = cellCost;

    DataGridViewCell cellTotal = new DataGridViewTextBoxCell();
    cellTotal.Value = item.Quantity * item.Price;
    row.Cells["colTotal"] = cellTotal;

    DataGridViewCell cellPartNumber = new DataGridViewTextBoxCell();
    cellPartNumber.Value = item.Part.Number;
    row.Cells["colPartNumber"] = cellPartNumber;
}

Thanks!


只是为了扩展这个问题,还有另一种方法可以将行添加到DataGridView,特别是如果列始终相同:

object[] buffer = new object[5];
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (SaleItem item in this.Invoice.SaleItems)
{
    buffer[0] = item.Quantity;
    buffer[1] = item.Part.Description;
    buffer[2] = item.Price;
    buffer[3] = item.Quantity * item.Price;
    buffer[4] = item.Part.Number;

    rows.Add(new DataGridViewRow());
    rows[rows.Count - 1].CreateCells(gridViewParts, buffer);
}
gridViewParts.Rows.AddRange(rows.ToArray());

或者如果您喜欢 ParamArrays:

List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (SaleItem item in this.Invoice.SaleItems)
{
    rows.Add(new DataGridViewRow());
    rows[rows.Count - 1].CreateCells(gridViewParts,
        item.Quantity,
        item.Part.Description,
        item.Price,
        item.Quantity * item.Price,
        item.Part.Number
    );
}
gridViewParts.Rows.AddRange(rows.ToArray());

显然,缓冲区中的值需要与列(包括隐藏列)的顺序相同。

这是我发现将数据输入到数据库中的最快方法DataGridView无需将网格绑定到DataSource。绑定网格实际上会大大加快速度,如果网格中有超过 500 行,我强烈建议绑定它而不是手动填充。

绑定还具有一个好处,即您可以保持对象完好无损,例如。如果要对选定的行进行操作,可以在绑定DatagridView的情况下这样做:

if(gridViewParts.CurrentRow != null)
{
    SaleItem item = (SalteItem)(gridViewParts.CurrentRow.DataBoundItem);
    // You can use item here without problems.
}

建议您的绑定类确实实现System.ComponentModel.INotifyPropertyChanged接口,它允许它告诉网格有关更改的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将行添加到具有现有列的 datagridview 的相关文章

随机推荐

  • 应用程序标题旁边的红点?

    在模拟器上 我注意到我的应用程序标题旁边有一个红色圆圈 类似于新下载的应用程序旁边出现的蓝色圆圈 但只是红色 它看起来是这样的 这意味着什么 我得到了这个问题的实际解决方案 这是由于配置配置文件造成的 如果您在应用程序构建设置中使用实时应用
  • 多个可选参数web api属性路由

    我是属性路由的新手 我不确定这是否可能 我有一个属性路由 它的工作原理如下 HttpGet Route GetIssuesByFlag flag int 3 public IEnumerable
  • JDBI 接受 UUID 参数吗?

    当使用 SQL 对象参数绑定时 JDBI使用 UUID 参数开箱即用 我有一个这样的方法 SqlQuery EXECUTE MyProcedure myField MyDto myMethod Bind myField UUID myFie
  • Ubuntu 升级到 19.10 后 Minikube 将无法工作

    我刚刚将 Ubuntu 从 19 04 升级到 19 10 现在 Minikube 无法启动 所以 过了一段时间 我就完全删除了Minikube minikube stop minikube delete docker stop docke
  • 无法在非 Boost 版本的 Asio 中使用 asio::placeholders::error

    我正在尝试在项目中使用 Asio 的非 Boost 版本 我正在写一个回调stream protocol acceptor async accept 签名需要asio placeholders error要通过 但当我这样做时 出现以下错误
  • 如何在node.js中的“require”之后删除模块?

    比方说 在我需要一个模块并执行以下操作之后 var b require b js do something with b 然后我想拿走模块b 即清理缓存 我怎样才能做到呢 原因是我想动态加载 删除或更新模块而不重新启动节点服务器 任何想法
  • 如何更改 Visual Studio 中控制台应用程序的图标?

    我正在 VS 2008 中开发 C 控制台应用程序 无法更改图标文件 我更改了图标文件project gt properties gt application选项卡 但旧图标仍然与新版本一起显示 检查了帖子中的以下答案以修改 resx 文件
  • 导入处理/模块从 python2 更改为 python3?

    我试图遵循中所示的设计模式上一个问题与 SQLAlchemy 相关 旨在跨多个文件共享公共 Base 实例 代码与 python2 和 python3 完全相同 但是 当我在模块 称为 model 中移动文件 a py b py c py
  • Microsoft Graph 中的单引号转义

    我尝试通过 displayName 查询用户 但在通过 C SDK 和 Graph Explorer 发送请求时无法转义单引号 更新 示例中不清楚 我遇到问题的搜索词是I 查询示例 https graph microsoft com v1
  • 发生 JNI 错误。请检查您的安装

    我正在尝试使用 TestNG 运行一个非常简单的测试 但收到此错误消息 我尝试阅读之前的答案 但它对我不起作用 如果有人能帮助我 我会很高兴 因为我只是 TestNG 的初学者 这是错误消息 Exception in thread main
  • 使用 C# 从 Azure Blob 复制到 AWS S3

    请注意 这是我第一次用 C 做任何事情 所以请友善 我可能犯了一些非常基本的错误 是的 我知道我不应该对密钥进行硬编码 但当代码执行我想要的操作时会修复它 我正在尝试创建一个 Azure 函数 将所有新项目从 Blob 存储复制到 AWS
  • Quartz Cron 表达式:每 15 天运行一次,即一个月运行两次

    我想使用quartz cron 表达式设置调度程序 该表达式每 15 天触发一次 例如每月 1 日和 15 日 0 15 10 15 仅在每月 15 日触发 月 我已经测试过了 下面的表达式工作正常 0 0 0 1 15 1 15 语句在每
  • 使用 jQuery 获取多个 CSS 属性

    我知道你可以设置多个 css 属性 如下所示 element css property value property value 但是如何使用 CSS 获取多个属性呢 有什么解决办法吗 jquery css 方法 从 1 9 开始 表示您可
  • PhantomJS 单击页面上的链接

    我已经编写了 PhantomJS 应用程序的一些部分 我正在一个网站上进行解析 在该网站上我将用户名和密码写入公式 之后我必须点击一个链接 而我收到此错误 TypeError undefined is not a function eval
  • html5视频通过鼠标滚轮滚动播放

    我希望能够制作一个网页 当用户上下滚动鼠标滚轮时 可以向前和向后播放视频 这似乎是可以想象的 通过 HTML5 和可能的 JavaScript 对于此类事情的任何指导都会有所帮助 随时暂停视频 每隔一段时间获取滚动位置并使视频寻找到滚动位置
  • 在 Objective-C 中比较颜色

    我试图使用 Objective C 编写的代码来确定两种颜色是否相等 我正在使用这段代码来确定两种颜色是否相等 当前用于调试目的 NSLog currentColor is currentColor NSLog Adjacent Color
  • Gradle解压时如何压平目录结构?

    我想从战争中提取一些 jar 作为我的 gradle 2 0 构建的一部分 到目前为止我有这个 task unzip type Copy def zipFile file D external dependent war def outpu
  • HTTP 错误 500.19 和错误代码:0x80070021

    我有一个由 Visual Studio 2013 构建的简单 webAPI 当我从 VS13 运行它时 它运行良好 但是当我在本地 IIS 中复制该项目时 它会出现以下错误 HTTP 错误 500 19 内部服务器错误 请求的页面无法访问
  • 检查gdb中的模板参数包

    我正在尝试调试以下简单程序 include
  • 将行添加到具有现有列的 datagridview

    我有一个DataGridView有几个创建的列 我添加了一些行并且它们显示正确 但是 当我单击单元格时 内容就会消失 我究竟做错了什么 代码如下 foreach SaleItem item in this Invoice SaleItems