首页 > 解决方案 > 在 DataGridView 的最后一行底部画一些东西?

问题描述

我知道如何绘制,实际上我可以绘制(在这种情况下,它实际上看起来像一个添加按钮)。提出的问题是当有足够多的行可以容纳垂直滚动条时,网格没有空间来绘制我的添加按钮。

我尝试通过设置AllowUserToAddRows为来解决该问题true。这将带来一个新行,应该给我足够的空间来绘制添加按钮。

但是发生的另一个问题是我需要完全阻止新行(由启用AllowUserToAddRows)的行为,例如默认情况下,当最后一行输入并完成输入时,总是添加新行并向底层添加新项目绑定数据。尽管我绘制的添加按钮完全覆盖了新行的外观,但实际上它仍然存在并绑定到基础数据。

这真的是完全不能接受的。我会尝试截取一些击键,例如 TAB、ENTER(在最后一行),但看起来这还不够。

所以为了解决我的问题,我们有两种方法:

任何方法都可以(虽然我更喜欢第一种,但第二种可能几乎可以工作,但仍然有问题——我真的不相信它的可行性和可靠性)。

这是我的尝试(按照第二种方法,因为我不知道按照第一种方法解决这个问题)。

//override some messages
protected override void WndProc(Message m){
     //keydown
     if (m.Msg == 0x100){
        var vk = m.WParam.ToInt64();
        //for the last row
        if (CurrentCell.OwningColumn.DisplayIndex == ColumnCount - 1)
        {
            //intercept the TAB and ENTER
            if (vk == 0x9 || vk == 0xd){
                return;
            }
        }
     }
}

更新

Winforms 的另一个令人讨厌的错误(也许他们称之为功能)。实际上,最后DataGridView仍然给我们留了一个空间(当有很多行时),但是一旦它被添加到一些特殊的布局面板中,比如GroupBox, TableLayoutPanel, ... 它默认情况下不会共享任何空间。为了避免放置在某些布局面板中有时不容易接受,我们可以自定义一些 GroupBox(使用普通面板)但我们不能轻易自定义一个TableLayoutPanel. 我认为这开启了另一种方法(第三种方法)。

标签: c#winformsdatagridviewcustom-controlscustomization

解决方案


推荐阅读