【问题标题】:Getting the bound field name at runtime在运行时获取绑定的字段名称
【发布时间】:2009-10-02 21:15:31
【问题描述】:

如果在FormView中使用两种方式绑定控件(如Text=''),如何获取字段名“FieldName”?我想用这些信息做几件事;例如,我有一个数据库表,其中包含来自 ERWin 的所有字段定义的转储,我想以编程方式为每个单独的字段创建某种上下文相关的帮助(有数百个分布在几十个表单中)。

这几乎与a question asked a year ago 完全相同,但答案对我来说没有多大意义。首先,答案似乎是针对 GridView 而不是 FormView(e.Row.Cells[0] 放弃了它)。其次,SortExpression 与什么有什么关系?第三,它提到了一个事件论点,但是对于什么事件呢?在 OnDataBound 中,EventArgs e 为空。

【问题讨论】:

  • hi pjabbot - 您想在哪里(意味着在哪个事件处理程序或页面或其控件的现有方法中)检索字段名称?在某些情况下可能会获取字段名称,但在其他情况下可能不会。您能否发布一个简单的代码示例,展示您想要做什么的示例,并为您要查找的代码提供一个占位符以提取字段名称?鉴于这种情况,帮助您填写该占位符会更容易。
  • 上面提到了我想要做的一个例子——我有一个从 ERWin 导出的属性定义表。我想获取表单视图上每个绑定控件的绑定字段名称,然后以编程方式将工具提示分配为属性的定义。这样,当有人将鼠标悬停在“托管结束日期”文本框上时,会出现一个工具提示,说明“由产权机构确定的物业托管结束日期”。在这一点上,我愿意接受页面生命周期中任何地方的答案。

标签: c# asp.net data-binding formview


【解决方案1】:

似乎没有任何方法可以从 FormView 获取此信息,因为列名未存储在您想要的级别。

但是,我必须承认,我不明白您为什么要在运行时检索您在编译时就知道的东西。为什么不能只写你需要的代码?即使您希望您的代码更通用,您也可以创建一个包含控件名称及其关联的绑定列名称的字典,以传递给您的类,该类执行它需要执行的任何操作。

关于上一个问题的答案 - GridView 将列名存储在 SortExpression 属性中,以便在用户使用网格时知道要按哪一列排序。因此,在 GridView 中,您可以通过 SortExpression 访问列名。

【讨论】:

  • 我可能不得不求助于创建字典,但这是一个包含大约三打 Web 表单、数百个表和数千个字段的应用程序。仅仅完成将字段名称链接到控件名称所涉及的所有键入操作就需要花费整整一周的时间,然后我还要维护另一个数据结构。我希望有一个简单的出路。
  • 您可以编写一个快速的 Python 脚本来翻阅您的 ASPX 文件并为每个页面生成所需的代码。
  • +1 杰森。用代码解决问题正是编程的全部内容。
  • 嗯,这里和谷歌说它不能完成,所以我想这就是答案。
  • 我仍在研究这个,而不是谷歌,但 Reflector 表明这确实是不可能的。主要原因:DataBinder.Eval 方法(Eval 映射到的地方),后来使用TypeDescriptor.GetProperties() 来获取属性和值,没有被缓存。如果它们以一种或另一种方式被缓存,您可以使用反射来获取信息。在GridView 的情况下,名称被存储,在FormView 的情况下,它们不是。最好的解决方案是从Eval(prop)Util.StoreProp(Eval(prop), prop) 的全局搜索/替换,这应该不会太难。
【解决方案2】:

执行此操作的一种简单方法是以编程方式将数据字段的名称分配给 Formview 控件的 Tooltip 属性,然后当用户将鼠标悬停在这些控件上时,将向用户显示数据字段名称。如果您想要更具体的答案,请说明这是否是您想要完成的。

【讨论】:

  • 我想要完成的是第一段的第一句话——在运行时获取双向绑定字段的名称。其余的只是我在获得字段名称后打算如何处理的一个示例。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 2013-02-03
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多