【问题标题】:How To Access Control In Templatefield Gridview With Custom Id如何使用自定义 ID 在模板字段 Gridview 中访问控制
【发布时间】:2010-12-31 07:30:42
【问题描述】:

我有一个自定义的 gridview。我的网格只需在标题中单击 1 次即可对每一列进行排序,而无需用户(程序员)进行任何设置和重载方法,例如排序等。(我成功地做到了这一点并且工作正常) 用户(程序员)可能会在网格中添加每一列。例如模板字段、超链接字段、绑定字段...。 对于排序,我必须访问列的数据字段。 我可以通过此代码访问 boundfield 列。我可以访问数据字段和标题文本以及... 示例:

for (int j = 0; j < this.Columns.Count; j++)
                {
                    BoundField bf;
                    bf = this.Columns[j] as BoundField;
                        if (bf != null)
                        {
                            string ht = bf.HeaderText;
                            string df = bf.DataField;
                        }
                 }

但我可以访问模板字段中的控件。例如 ColumnBound。 示例:

  <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>

我想访问 "Name" (Bind ("Name") 或 Eval ("Name")) 。 我怎样才能? 有一点:我现在不知道模板字段中控件的 ID(在本例中为“Label1”)是什么。 特别感谢

【问题讨论】:

    标签: asp.net gridview itemtemplate templatefield


    【解决方案1】:

    在模板字段上排序可能不可行 - 模板字段可能已与多个数据字段绑定,并且很难确定正确的排序字段。

    如果您采用一些受限视图,例如只有那些模板字段可以在标签和/或锚绑定到某些数据字段的情况下进行排序,那么方法将是

    1. 查看列是否为模板字段 (var tf = this.Columns[j] as TemplateField)
    2. 如果是,请使用模板(使用ItemTemplate 属性)
    3. 通过模板的子控件递归迭代,如果您找到标签(或说锚点)然后检查其文本属性以获取数据绑定表达式并获取您的数据字段。

    但这种方法对于&lt;img src="Some Icon" /&gt;&lt;span&gt;&lt;%# Eval("Name") %&gt;&lt;/span&gt; 等模板会失败。

    上述技术的另一个变体是获取字段的项目模板,然后调用Render 方法来获取模板html,然后您可以对其进行解析以搜索数据绑定表达式,然后确定您的数据字段。但是,这种方法有其自身的缺陷 - 例如,&lt;img src='&lt;%# Eval("IconType") %&gt;' /&gt;&lt;span&gt;&lt;%# Eval("Name") %&gt;&lt;/span&gt; 之类的模板可能会使上述逻辑按 IconType 字段而不是 Name 字段进行排序。

    IMO,更强大的方法是在您的 gridview 控件中具有属性/方法,该控件将接受模板列的排序字段(如果有)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多