小编Yur*_*ouk的帖子

C#设置ListView的Item的Subitem的文本不显示

我在这里有点失去理智了。当我最初构建 ListView 时,它完全按预期工作:

ListViewItem listViewItem = listView.Items.Add(model.Id.ToString(), model.Name, model.Id.ToString());
listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
  {
    new ListViewItem.ListViewSubItem() {Name = "ArtNr", Text = model.ArticleNumber},
    new ListViewItem.ListViewSubItem() {Name = "Quantity", Text = "XXX"},
  });
Run Code Online (Sandbox Code Playgroud)

我在控件中定义了 3 列,它们分别显示名称、文章编号和“XXX”。

在稍后阶段,我必须用实际数据替换“XXX”,并执行以下操作:

foreach (ListViewItem listViewItem in listView.Items)
  {
    InvoiceLine invoiceLine = FindInvoiceLine(...);
    if (invoiceLine == null)
        continue;

    listViewItem.SubItems["Quantity"].Text = invoiceLine.Quantity.ToString();
  }
Run Code Online (Sandbox Code Playgroud)

我可以看到文本实际上被设置在正确的 SubItem.Text 中,如果我稍后检查,同时通过不同的引用引用列表视图,即我知道我正在查看正确的对象。然而 GUI 并没有反映变化,它在第三列中仍然显示“XXX”。

是什么赋予了?!

c# listview winforms

2
推荐指数
1
解决办法
1213
查看次数

tSQLt:在设置和测试之间共享数据

我正在使用tSQLt对t-sql代码进行单元测试。

通常,测试的“安排”部分相当广泛,我试图将其中的大部分推到SetUp过程中,以便在类中的测试之间重用。

如果安装程序和测试过程可以“知道”相同的信息,即拥有一些共享数据,那将非常有用。例如,假设安装程序创建了测试发票并将发票ID设置为已知的值:

CREATE PROCEDURE [InvoiceManager].[SetUp]
AS
  DECLARE @TestId INT = 10;

  EXEC tsqlt.FakeTable @SchemaName='dbo', @TableName='Invoice';
  INSERT INTO dbo.Invoice (Id, Amount) VALUES (@TestId, 20.50);
GO
Run Code Online (Sandbox Code Playgroud)

然后在测试中,我们想对测试发票进行处理,例如:

CREATE PROCEDURE [InvoiceManager].[Test_InvoiceHandler]
AS
  DECLARE @TestId INT = 10; -- duplication I would like to eliminate

  -- Action
  EXEC dbo.InvoiceHandler @InvoiceId = @TestId;

  -- Assert
  -- ... some assertions
GO
Run Code Online (Sandbox Code Playgroud)

能够通过在SetUp过程中将@TestId的值推入某个“类变量”,然后在测试中使用它,来替换在两个(或更多过程)中复制@TestId的值将是一个很好的选择。有什么想法如何以紧凑的方式实现它吗?我可以想象在[InvoiceManager]模式中创建表并在测试中从中读取数据。是否有这样的机会存在,只是我在文档中找不到它?谢谢!

sql-server tdd unit-testing tsqlt

2
推荐指数
1
解决办法
1049
查看次数

标签 统计

c# ×1

listview ×1

sql-server ×1

tdd ×1

tsqlt ×1

unit-testing ×1

winforms ×1