【问题标题】:How to programmatically hide a linq-to-sql column on a datagridview?如何以编程方式隐藏 datagridview 上的 linq-to-sql 列?
【发布时间】:2010-11-08 11:06:46
【问题描述】:

为了允许用户插入/更新/删除,我将 linq 查询绑定到 datagridview。但是我想隐藏 Id 列。但我宁愿不硬编码

datagridview.columns[id].visible=false

如果 id 列名称发生更改。我读过你可以通过反射来获得一个运行时的列列表,但我不能在设计时检查列名。有可能吗?

如果我将查询更改为不包含 ID,那么我将硬编码列列表而不是 id 列名,因此如果添加了列,我将不得不在那里手动更新。

【问题讨论】:

    标签: linq linq-to-sql data-binding .net-3.5


    【解决方案1】:

    如果您使用的是 Winforms,那么您的 Form 上应该有一个 BindingSource,该 BindingSource 键入到您的 LINQ-to-SQL 类型。如果您这样做,那么您将获得对该类中所有可用字段的完整设计器支持。

    如果您正在使用 LINQ-to-SQL 实体(或任何其他类)进行大量数据绑定工作,我强烈建议您查看 Mark Gravell 的 HyperDescriptor。通过绕过对类属性的重复运行时调用,它显着提高了 UI 数据绑定性能。

    【讨论】:

    • 绑定源仅在我使用设计时数据绑定时才在这里工作 =/ 目前没有部分属性之类的东西,所以我不能为那些添加 [Browsable(false)] 属性列。
    • @Maslow:您的问题似乎表明您想在设计时使用某些东西。是否有您不想/不能使用设计时绑定的特殊原因?无论如何,没有办法让索引器(如 datagridview.columns)在编译时安全,只要传递给它的值就是您所要求的。
    • @Adam:我没有进行设计时绑定,因为 datagridview 根据用户设置的视图显示不同的对象类型。也许这是过早的优化,并且弹出和弹出不同的设计时间数据网格视图的开销也不错。是的,属性名称的编译时安全性似乎不存在,添加到编译器中似乎并不难。
    • @Maslow:您要求做的是让编译器弄清楚(或以某种方式向编译器指示)您所拥有的字符串实际上代表了一个属性名称。好的,所以现在必须弄清楚它们应该对应什么类型(在您的场景中可能很简单,但在其他场景中可能很困难或不可能)。这只允许属性名称。那些实现自己的类型描述符的对象,比如 DataView 呢?这些属性直到运行时才真正创建,那么编译器如何检测这些属性?
    【解决方案2】:

    你不能在 html 中做吗?还是您使用的是 ASP.NET?

    <asp:BoundField DataField="id" Visible="false" />
    

    【讨论】:

    • 我没想到dataGridView和Asp.Net里一样我还以为那里叫dataGrid?无论哪种方式,我都在 winforms
    • 对。它在 ASP.NET 中称为 DataGrid 或 GridView。 DataGridView 是一个 WinForms 控件。
    猜你喜欢
    • 2018-10-06
    • 2011-01-16
    • 1970-01-01
    • 2011-08-10
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多