在gridView中获取绑定类型的模板化列控件

时间:2013-06-05 11:35:22

标签: asp.net gridview reflection bind

您好我有以下网格视图

  <asp:GridView ID="grdSettings" runat="server" Height="400px" Width="100%"
                        AutoGenerateColumns="false" >
                        <Columns>
                            <asp:TemplateField HeaderText="XYZ"  BoundFieldName="XYZTypeName">
                                <ItemTemplate>
                                    <asp:Label ID="lblCustomerName" runat="server" Text='<%# Bind("CustomerName") %>'>
                                    </asp:Label>

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

                            </asp:TemplateField>
                        </Columns>
                     </asp:GridView>   

由Customer of List约束,类如下

Class Customer
{
  public string CustomerName { get; set; }
  public int CustomerId { get; set; }
} 

现在,在一个名为GetGridStuff()的方法中,我需要迭代每一列并获取绑定到模板字段中控件的类型。例如,在模板字段中的第一个控件的情况下

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

我需要知道它包含哪种类型的属性数据,在这种情况下是它的CustomerName。我需要在运行时动态地获取它,以便在程序的一部分中编写代码,而不知道这个网格结构。我有网格对象,我可以访问所有属性。

1 个答案:

答案 0 :(得分:1)

让我试试这个,离开编码已超过5年了,如果我理解正确的问题,你可能想通过服务器端代码处理它。

查找名为ItemBound的事件(或类似的原谅我的记忆),它为您提供当前行(属性)中所有项目的值。您还需要声明临时控件类型(标签,文本框等),并使用具有适当类型转换的e.FindControl为这些控件分配相应的值,例如: Label l = (Label)e.Findcontrol("Name")

这种方法的缺点是你应该避免过多的过程,因为它将在创建网格的每一行上执行。

如果您仍然需要一个精确的代码来处理问题,请告诉我,否则此描述至少应该帮助您查找行级别事件来破解问题,并鼓励您坚持技术论坛:)