在没有 BindingSource 的情况下使用 BindingNavigator

2024-01-05

我有一个在数据库中完成分页的应用程序。也就是说,检索项目列表的调用包括页码、页面大小,并且将仅返回该页面的数据。例如:

ItemCollection items = ListAllItems(1, 20); // page 1, show 20 items per page

ItemCollection 包括 PagingUtil 属性,该属性是一个类,其中包含支持分页而不检索所有记录的属性。

public class PagingUtil
{
    public int StartRow { get; private set; }

    public int EndRow { get; private set; }

    public int TotalPages { get; private set; }

    public bool HasPrevPage { get; private set; }

    public bool HasNextPage { get; private set; }

    public int TotalCount { get; private set; }

    private PagingUtil() {}

    public PagingUtil(int pageNumber, int visiblePerPage, int totalCount) 
    {
            ... logic for setting property values here ...
        }
    }

我想使用绑定导航器控件 http://msdn.microsoft.com/en-us/library/8zhc8d2f%28v=VS.80%29.aspxWindows 窗体应用程序中的 UI 无需指定绑定源 http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource%28v=VS.80%29.aspx.

问题是,只有设置了 BindingSource,BindingNavigator 才会呈现为启用状态。在设计器和代码中将 Enabled 属性设置为 true 不受尊重,我似乎找不到解决方法或替代方案stock控制。

可以这样使用 BindingNavigator 吗?如果需要,我可以创建自定义分页控件,但如果不需要,我宁愿不这样做。


我今天尝试做类似的事情,最终为 BindingNavigator 发明了一些数据对象来管理,然后代表数据库中实际数据的页面。可以为 BindingSource 指定一个 IListSource 作为其 DataSource,然后它将从中绘制要绑定的数据列表。

class PageList : System.ComponentModel.IListSource
{
    private const int itempagesize = 250;
    private long totalitems;

    public PageList(string tablename, long totalrecords)
    {
        this.TableName = tablename;
        totalitems = totalrecords;
    }

    public bool ContainsListCollection { get; protected set; }

    public System.Collections.IList GetList()
    {
        List<ItemPage> pages = new List<ItemPage>();
        int totalPages = (int)Math.Ceiling((double)totalitems / (double)itempagesize);
        pages.AddRange(Enumerable.Range(0, totalPages).Select(
            pageidx => new ItemPage(itempagesize, pageidx * itempagesize)));
        return pages;
    }

    public string TableName { get; protected set; }


    public class ItemPage
    {
        public ItemPage(int limit, int offset)
        {
            this.Limit = limit;
            this.Offset = offset;
        }

        public readonly int Limit;
        public readonly int Offset;
    }
}

所以我有一个绑定到 BindingSource 的 BindingNavigator,当我想要时 设置可用数据页的总数我只是做了一个:

bsDataPages.DataSource = new PageList(tableName, recordCount);

然后,当使用导航器时,会触发绑定源事件处理程序

    private void bsDataPages_CurrentChanged(object sender, EventArgs e)
    {
        PageList list = bsDataPages.DataSource as PageList;
        PageList.ItemPage page = bsDataPages.Current as PageList.ItemPage;
        var items = m_datastore.GetTableItems(m_conn, 
            list.TableName,page.Limit,page.Offset);
    }

我可以从数据库中获取该页数据。

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

在没有 BindingSource 的情况下使用 BindingNavigator 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • PHP 和 Javascript 交互

    我需要在这里澄清一些事情 我有一个网站 每次在浏览器中重新加载该网站时 都会更新两个变量的值 该页面显然是一个 HTML 页面 但变量是通过 javascript 函数更新的 该页面在我的服务器上运行 PHP 可以检索这些变量的值并使用它们
  • 验证命名约定? C# [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 R 中使用 ggplot2 制作默认自定义主题

    当我尝试使用应用定制主题时ggplot2它会收到如下错误 Error in FUN text 1L Theme element text has NULL property family face size hjust vjust angl
  • 图像文件中的二维码解码器(反应本机)

    我正在寻找一种从反应本机 特别是ios 中的图像文件中解码二维码的方法 我知道世博会提供相机扫描仪解决方案 但我需要文件解码器 很感谢任何形式的帮助 您可以使用jsQR 库 https github com cozmo jsQR从图像文件中
  • 将元素与 HTML 表格单元格的底部对齐

    我的 HTML 表格的一个单元格中有多个元素 我希望一些元素与单元格的底部对齐 一些元素与顶部对齐 我无法让元素与底部对齐 我的桌子是 tr td style background color 007CE2 p test br anothe
  • 带有命名空间的 XML 文档上的 XPath

    我有这个带有命名空间的 XML 文档 并且我想使用 XPath 提取一些节点 这是文件
  • Azure 函数在 azure 门户上显示 0 次执行

    我是一个蔚蓝新手 我的设置如下 我有一个 IoT 中心 一个事件中心 一个 Azure 函数 其想法是将消息发送到 IoT 中心 根据某种消息类型将它们路由到事件中心 并使用该函数处理这些事件 我创建了一个示例控制台应用程序 用于将消息从我
  • Ionic 2 范围触摸事件

    我正在尝试在输入末尾使用 Ionic 2 获取范围滑块的值 In the 文档 http ionicframework com docs v2 api components range Range output events唯一可用的事件是
  • ReaderWriterLockSlim 什么时候比简单的锁更好?

    我正在使用这段代码对 ReaderWriterLock 进行一个非常愚蠢的基准测试 其中读取的频率比写入的频率高 4 倍 class Program static void Main ISynchro test new Locked new
  • 类名中有一个“+”?

    班级名称 MyAssembly MyClass MyOtherClass 问题显然是 作为分隔符 而不是传统的点 它的作用 并查找官方文档 看看其他分隔符是否存在 这就是嵌套类型的表示方式 例如 namespace Foo class Ou
  • ASP.NET API 无法在 Azure 上发布

    我正在尝试将 C API 发布到 azure 我遵循了中的所有步骤本文档 https learn microsoft com en us aspnet core tutorials publish to azure api manageme
  • 对于接近统一的值,浮点数学是否更精确?

    Question 我多次被告知 如果运算的数字接近于浮点运算 则浮点运算具有最高的精度 1 0 或者有时0 1 有没有道理呢 澄清 我所说的 算术 是指诸如a b a b a b 但是也sqrt x 和其他数学函数 具体来说 假设所有变量都
  • Python 中的 CRC16

    如何在Python中计算CRC16 在 Perl 中我会写这样的东西 use Digest CRC crc16 result crc16 str 我如何在Python中做同样的事情 这里有一个计算CRC16的库http pypi pytho
  • 如何检查数组的所有元素是否相同?

    即 验证 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 but not a 0 1 a 0 2 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 a 0 1 谢谢 count ar
  • 如何将字节值转换为小数?

    我正在尝试从文件中加载一些十进制值 但我无法找出获取原始值并将其转换为小数的正确方法 我已将文件读入字节数组 每个四个字节块应该代表一个十进制值 为了帮助解决这个问题 我构建了一个表格 其中说明十进制值 1 到 46 如何表示为四个字节块
  • Visual Studio 调试器跳过断点

    在调试单元测试时 我的 Visual Studio 2008 IDE 的行为非常奇怪 我有一个断点 当我点击它并尝试使用 F10 单步执行时 测试就会结束 如果我在被测试方法内的每一行上设置断点 我最终会得到一个随机断点 而不是下一行的下一
  • 切割频谱图 matplotlib 中未使用的频率

    我有一个采样率为 16e3 的信号 其频率范围为 125 到 1000 Hz 因此 如果我绘制一个频谱图 由于所有未使用的频率 我会得到一个非常小的颜色范围 我尝试通过设置 x 限制来修复它 但这不起作用 有没有办法切断未使用的频率或用 N
  • 达到虚拟实时时间限制(178/120秒)

    我使用的是ubuntu 16版本并运行Odoo erp系统12 0版本 在我的应用程序日志文件中 我看到信息显示 已达到虚拟实时时间限制 178 120 秒 它到底意味着什么以及它会对我的应用程序造成什么损害 另外我如何增加虚拟实时限制 它
  • 无法加载本机 TensorFlow 运行时。原因:未找到图像。我究竟做错了什么?

    在配备四核 I7 和 NVIDIA GeForce GT 650M 的 Macbook Pro 上运行 从 virtualenv 运行 Tensorflow 时收到此错误消息 我做错了什么 我使用的是 protobuf 版本 3 2 0 t
  • 在没有 BindingSource 的情况下使用 BindingNavigator

    我有一个在数据库中完成分页的应用程序 也就是说 检索项目列表的调用包括页码 页面大小 并且将仅返回该页面的数据 例如 ItemCollection items ListAllItems 1 20 page 1 show 20 items p