小编Nic*_*ick的帖子

取消注册所有事件以释放内存

我有一个程序,允许编辑产品信息.我注意到在关闭编辑表单后它没有释放内存.经过一番研究后,我偶然发现了这个问题,提到问题可能在于事件订阅.

这对我来说很有意义,因为这个表单上有大约100多个控件,其中许多都是自定义事件的自定义事件,由父控件订阅.这会创建一个非常大的事件订阅层次结构.所以我找了一种方法来发布这些,并发现可以让你取消订阅该事件.

问题是,我有很多订阅.我是否真的必须在表单关闭时逐个手动取消订阅每个事件,或者至少有一种方法可以一次性释放它们,或者循环通过它们?

c# events

9
推荐指数
1
解决办法
397
查看次数

使用数据源时无法更改datagridview单元格颜色

我有一个有趣的问题.我试图使用数据表作为datagridview的数据源.我想为表中的一些单元格着色以指示各种事物,但由于某种原因,颜色将不会显示.因此,以下代码显示了一个未着色的单元格.

dataGridView1.DataSource = table;

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
Run Code Online (Sandbox Code Playgroud)

我只能在初始表单加载后显示颜色(例如在OnClick事件上设置单元格颜色).但是,如果我在下面的代码中显式创建视图的行和列,则着色有效.

foreach (DataColumn col in table.Columns)
    dataGridView1.Columns.Add(col.ColumnName, col.ColumnName);

for (int i = 0; i < table.Rows.Count; i++)
{
    var row = table.Rows[i];
    object[] values = new object[table.Columns.Count];
    for (int x = 0; x < table.Columns.Count; x++)
        values[x] = row[x].ToString();

    dataGridView1.Rows.Add(values);
}

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
Run Code Online (Sandbox Code Playgroud)

我不想以这种方式获得代码.有谁知道这里发生了什么阻止我着色细胞?

.net c# datagridview

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

数据库规范化

我最近将一个非常大的数据库表拆分成了较小的,可管理的表,而且大多数情况下我对我的工作感到满意,并且我觉得数据已正确规范化.

但是有一个例外.有问题的表来自产品数据库,该数据库存储有关公司销售的(您猜对了)产品的信息.我已将大部分信息分成两个表:ProductBaseProductBasePackaging.

这些表格包含与基本部件号相关的信息伞,而不是单个产品(每个基本号都有多个产品).

ProductBase包含相当一般信息,如MarketingCopy,Keywords等,并且还对施工即材料信息,部件等.

ProductBasePackaging当然,持有关于包装的数据.

现在我正在编写数据操作的应用程序,我开始猜测自己.现在我似乎已经让自己变得更难了,因为我必须跟踪使用相同密钥的多个表(基本部件号).或者我是否正确地将它们分开并且可能更进一步将结构分成它自己的表格?

我非常精通使用sql,但这是我第一次真正设计数据库结构,更不用说重构大型现有数据库了.所以基本上我要问的是,我应该有多个具有相同键的表,这些表由数据类型分隔,或者在单个表中保存在一起,我可以使用相同的键从一个表中引用我需要的所有内容吗?

对不起,我知道这是很多东西,我希望它有意义,并感谢所有通过它的人!

sql database-normalization

7
推荐指数
1
解决办法
533
查看次数

我对界面感到困惑吗?

我正在维护一个ASP.NET MVC项目.在该项目中,原始开发人员拥有绝对大量的接口.例如:IOrderService,IPaymentService,IEmailService,IResourceService.我感到困惑的是,每个都只能由一个类实现.换一种说法:

OrderService : IOrderService
PaymentService : IPaymentService
Run Code Online (Sandbox Code Playgroud)

我对接口的理解一直是它们被用来创建一个可以轻松互换组件的架构.就像是:

Square : IShape
Circle : IShape
Run Code Online (Sandbox Code Playgroud)

此外,我不明白这些是如何被创建和使用的.这是OrderService:

public class OrderService : IOrderService
{
    private readonly ICommunicationService _communicationService;
    private readonly ILogger _logger;
    private readonly IRepository<Product> _productRepository;

    public OrderService(ICommunicationService communicationService, ILogger logger,
        IRepository<Product> productRepository)
    {
        _communicationService = communicationService;
        _logger = logger;
        _productRepository = productRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎永远不会直接创建这些对象,因为OrderService orderService = new OrderService()它始终使用接口.我不明白为什么使用接口而不是实现接口的类,或者它是如何工作的.有什么重要的东西,我缺少关于我的谷歌技能没有发现的接口?

c# interface

6
推荐指数
1
解决办法
235
查看次数

命令队列

所以我有一个数据库(sql)管理程序,我一直在处理,处理我公司销售的项目.对于程序的主要部分,项目信息在用户使用一些自定义控件时更新.一切正常.但现在我进入程序的更高级别部分,即添加/删除/复制项目.这不能像动态更新一样,就像编辑项目信息一样,因为它太容易搞砸了.所以我基本上想在这里为他们设置一个文件 - >保存类型的交易.我如何看待这个工作是在列表中创建所有sql命令,然后在保存时运行它们.

这里可用的功能是添加新项目,删除项目,从其他项目复制和重命名.

所以这将是一个列表:

insert...
update...
update...
delete...
update...
etc.
Run Code Online (Sandbox Code Playgroud)

它将贯穿并执行所有命令.我遇到的问题是我已经有一个类,它有方法来处理所有这些函数.我想不出一种在队列中调用所有这些方法的方法,并且在另一个类中重写所有sql语句对我来说似乎很愚蠢.有没有办法让我记住一个类似的列表:

item.Rename()
item.ChangeSize()
item.Delete()
Run Code Online (Sandbox Code Playgroud)

我觉得我正在思考这个...或者可能没有思考......我不知道.

c# sql

5
推荐指数
1
解决办法
1742
查看次数

在sql select语句中连字符

这是我非常简单的选择声明:

select * from ProductDimensions where Item='100-1000'

当输入SSMS时,它会查询并返回结果.在VS中运行我的程序时,它什么都不返回.没有连字符的项目返回正常.是否需要一些特殊的语法才能使用我的C#代码?

C#代码:

adapter = new SqlDataAdapter("select * from ProductDimensions where Item='100-1000'", conn);
adapter.Fill(dataSet);
Run Code Online (Sandbox Code Playgroud)

就像我说的,如果我输入一个没有连字符的数字,例如'1000',它就可以了.

c# sql sql-server visual-studio-2010

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

禁用ToolStripMenuItem与禁用MenuStrip.Item

当用户登录到我的应用程序时,有些菜单项是我不希望每个用户看到的。所以我想禁用或使菜单项不可见。例如,当我尝试时是我fileToolStripMenuItem的第一项menuStrip

fileToolStripMenuItem.Enabled = false;-这行不通 menuStrip.Items[0].Enabled = false;-这行通

有人能启发我这里的区别吗?

另外,我希望能够从一个菜单项中禁用下拉菜单项,但是我也不能这样做。

这是代码:

public Form1()
        {
            InitializeComponent();

            // bunch of other code here

            if (!login.ValidatedUser)
            {
                menuStrip1.Items[0].Visible = false; // this works
                toolsToolStripMenuItem.Visible = false; // this does not
                btnStartResourceManager.Enabled = false;
                listAvailableSizes.Enabled = true;
                panelPicSet.Enabled = true;
            }
        }
Run Code Online (Sandbox Code Playgroud)

.net c# menustrip winforms

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