C# Windows 窗体(非 SQL):在新窗体上用整数 +1 填充 DataGridView 行中当前最高数字的文本框

Posted

技术标签:

【中文标题】C# Windows 窗体(非 SQL):在新窗体上用整数 +1 填充 DataGridView 行中当前最高数字的文本框【英文标题】:C# Windows Forms(Non-SQL): Populate text box on new form with an integer +1 above the highest number currently in a DataGridView row 【发布时间】:2022-01-10 03:27:00 【问题描述】:

我正在开发一个 C# Forms 应用程序,MainScreen 包含一个 DataGridView,其中第一行是自动生成的递增数字。当手动将数据编码到 DataGridView 中时,我可以将这个 ID 字段设置为递增的数字。

我现在要做的是创建一个“添加”表单,我需要在第一个文本框打开时填充下一个递增的数字。

知道 DataGridView 中当前使用的最后一个数字是什么的最简单方法是什么?

例如,如果我有 2 行,显然新的“添加”行的 ID 为 3,但我如何编码文本框以动态获取该信息并在每次打开表单时增加 +1?

编辑: 为了提供更多上下文,我将有一个添加按钮和一个修改按钮。除非选择了一行,否则修改按钮不会打开修改表单。这是我根据所选行填充修改表单上的文本框的代码:

ModPartIDBox.Text = Inventory.AllParts[Inventory.CurrentIdxPrt].PartID.ToString();

“添加”表单显然不检查也不关心是否选择了一行,所以我不能只调用已经填充的字段,所以我只需要一种方法来获取最高数字。

【问题讨论】:

好吧……如果代码是……“手动将数据编码到 DataGridView 中,我可以将这个 ID 字段设置为递增的数字”……那你不能只是跟踪这个“增量”值?或者如你所说……”如果我有 2 行,显然新的“添加”行的 ID 为 3”……所以如果网格中有 X 行,那么下一个“递增”的值是 X + 1? 【参考方案1】:

保留您要存储在 DataGridView 中的所有对象的列表,以便您以后可以访问它们的数据,例如:

var items = new List<MyObject>

MyObject 看起来有点像这样:

public class MyObject

    public int PartId  get; set; 

然后当你需要拉到最高的数字时,你可以使用 LINQ 表达式:

int highestNumber = items.OrderByDescending(x => x.PartId).First().PartId;

【讨论】:

我必须在这里遗漏一些东西,或者这个项目为了困难而故意不同。我已经尝试了我能想到或在网上找到的一切来使您的解决方案和其他解决方案起作用,但我真的迷路了。很抱歉浪费您的时间。 :( @ajrenfro 你没有浪费任何人的时间。我们是来帮忙的 :) 有一个 foreach 循环将每个项目添加到您的 DataGrid,但在将其添加到 DataGrid 之前,将对象添加到列表中(以我上面的示例为例)。如果您想在单击 DataGrid 中的一个项目时提取所有这些信息,请在 DataGrid 的 OnClick 方法上,获取您单击的项目的当前索引,然后将该索引放入您的列表中所有对象中较早创建的。 objectsList[0] 将返回用于填充 DataGridItem[0] 的对象

以上是关于C# Windows 窗体(非 SQL):在新窗体上用整数 +1 填充 DataGridView 行中当前最高数字的文本框的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# Windows 窗体中 SQL 查询的大量结果填充 dataGridView

C#在新窗体显示选中的按钮

c# 用 FindWindowEx 获取子窗体时 出异常

在 C# 中对 dataGridView 列进行排序? (Windows 窗体)

C# Windows 窗体应用程序,两个带有一个字符串变量的 .cs 文件

急急急! c# winform开发模式窗体的一个问题