我有个一个GridView 其中的一列是BoundField,我现在将它绑定到一个IList<string>,但是表格里不显示,应该如何设置Datafield?

解决方案 »

  1.   

    public class Test
    {
         public string StringText{get;set;}
    }IList<Text> 绑的是属性.
      

  2.   


    嗯IList<自定义类>是有属性的,但是现在得到一个IList<string>,我不想再新生成一个自定义类型数组或者其他复杂类型数组,不知道绑定到基本类型数组有没有提供方法?
      

  3.   


    <%# Container.DataItem %>
      

  4.   


    额 多谢 不过还有一点问题 
    我这样写是可以的:
    <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" BackColor="Blue"
                Height="133px" Width="128px">
                <Columns>
                    <asp:TemplateField HeaderText="words">
                        <ItemTemplate>
                            <asp:Label Text='<%#Container.DataItem %>' runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>可是这样写就不行:
    <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" BackColor="Blue"
                Height="133px" Width="128px">
                <Columns>
                    <asp:BoundField DataField="DataItem" />
                </Columns>
            </asp:GridView>
    这是为什么?
      

  5.   

    Container.DataItem 代表的是里面的数据项(具体的一个对象),并不是数据项里具体的属性比如你绑定的是FileInfo的数组, 那么要写成<asp:Label Text='<%# (Container.DataItem as System.IO.FileInfo).Name %>' runat="server" />
    或者
    <asp:Label Text='<%# Eval("Name") %>' runat="server" />
      

  6.   

    唔,那就是说只能使用TemplateField而无法使用BoundField了?
      

  7.   

    BoundField 必须要通过反射找到 数据项的属性,基本数据类型是没有属性的。GridView 设置 自动生成字段 是可以绑定 IList<string> 或 IList<int> 这样的基本数据类型的。Container 是数据绑定控件的 内部容器对象,实现了 IDataItemContainer 接口,对应的    GridView 的 GridViewRow
        DataList 的 DataListItem
        Repeater 的 RepeaterItem就是绑定表达式中的 Container在做高效数据绑定时,一般都使用 TemplateField + ((Type)Container.DataItem).Property 进行强制类型转换,不用到 Eval 或 Bind (这两个要用到反射)ASP.NET的数据绑定原理挺复杂的,受知识所限,我了解的仅限上述内容。
    楼主有机会不妨将 ASP.NET 的反编译源码看看,可能会了解更多。