我有一个自定义的gridview.my网格能够在标题中单击1次点击每个列,没有任何设置和重载方法,如用户(程序员)的排序等。(我这样做成功并且工作正常) 用户(程序员)可能会在grid中添加每个列。例如模板字段,超链接字段,边界字段.... 为了排序,我必须访问列的数据字段。 我可以通过此代码访问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;
}
}
但我可以访问templateField等templateFound中的控件。 样品:
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
我想要访问“名称”(Bind(“Name”)或Eval(“Name”))。 我怎么能够? 有一点:我现在不知道templatefield中控件的ID(在本例中为“Label1”)是什么。 特别感谢
答案 0 :(得分:1)
对模板字段进行排序可能不可行 - 模板字段可能已与多个数据字段绑定,并且难以确定正确的排序字段。
如果你采取一些约束视图,例如只有那些模板字段可以被排序,其中label和/或anchor被绑定到某个数据字段,那么方法就是
var tf = this.Columns[j] as TemplateField
)ItemTemplate
属性)但是这种方法会因<img src="Some Icon" /><span><%# Eval("Name") %></span>
等模板而失败。
上述技术的另一种变体是获取字段的项模板,然后调用Render
方法获取模板html,然后您可以解析它以搜索数据绑定表达式,然后决定您的数据字段。但是,这种方法有其自身的缺陷 - 例如,<img src='<%# Eval("IconType") %>' /><span><%# Eval("Name") %></span>
之类的模板可能会使上述逻辑按 IconType 字段而不是 Name 字段进行排序。 / p>
IMO,更强大的方法是在gridview控件中拥有属性/方法,接受模板列的排序字段(如果有)。