【问题标题】:Bind Collections To Gridview将集合绑定到 Gridview
【发布时间】:2013-03-05 11:14:43
【问题描述】:
protected void BindGV()
        {
            List<List<string>> list = new List<List<string>>()
            {
                new List<string>() {"Hussain","IT","Hyderabad" },
                new List<string>() { "Sharief","IT","Bangalore"},
                new List<string>() { "Shaik","IT","Chennai"}
            };
            gv1.DataSource = list;
            gv1.DataBind();

        }

我只想在 Gridview 中显示名称和城市。我想像这样使用:

<asp:Boundfield Datafield="" Headertext="Name"/>

这种情况下如何使用DataField??

【问题讨论】:

  • 我不确定,但你可以利用 linq

标签: asp.net generics gridview collections


【解决方案1】:

首先,您应该使用某个类而不是字符串创建一个列表。然后,您可以将 DataGrid 中的类属性用作列。

例如:

public class Personnel
{
    public string Name { get; set; }
    public string Department { get; set; }
    public string Location { get; set; }
}

然后你可以创建一个像这样的数据源:

protected void BindGV()
{
    List< Personnel > list = new List< Personal >()
    {
        new Personnel {Name = "Hussain", Department = "IT", Location = "Hyderabad" },
        new Personnel {Name = "Sharief", Department = "IT", Location = "Bangalore"},
        new Personnel {Name = "Shaik",  Department = "IT", Location = "Chennai"}
    };

    gv1.DataSource = list;
    gv1.DataBind();

}

在你的代码后面创建 DataGrid 之类的

<asp:DataGrid runat="server" ID="gv1" AutoGenerateColumns="False>
    <Columns>
        <asp:BoundColumn HeaderText="Name" DataField="Name" />
        <asp:BoundColumn HeaderText="Dept" DataField="Department" />
        <asp:BoundColumn HeaderText="City" DataField="Location" />
    </Columns>
</asp:DataGrid>

应该就是这样。

更新:根据您的评论,您想以编程方式访问DataField。您可以通过枚举gv1.Columns 属性然后将结果转换为BoundColumn 来做到这一点。这将使您能够访问DataField 和其他属性。

【讨论】:

  • 是的,我知道上面给出的方法。但是我想知道在这种情况下如何访问Datafiled?
  • 以编程方式访问 DataField?如果是这种情况,请检查我的更新部分。
【解决方案2】:

正如 Husein 所说,首先使用 Get , Set 创建类。 喜欢

Public class BindGV
{
    public string name { get; set ;}
    public string Profile { get; set ;}
    public string loc { get; set ;}
}

在aspx页面Gridview BoundField....

<ItemTemplate..>
    <b><%# DataBinder.Eval(Container, "DataItem.Title") %> </b>
    <br />
    <%# DataBinder.Eval(Container, "DataItem.Description") %>
</ItemTemplate>

... 或 Apsx.cs 代码

BindGV.datasource=object.GetDetails();
BindGV.dataBind();

【讨论】:

    【解决方案3】:

    你可以利用 linq

    List<List<string>> list = new List<List<string>>()
                                  {
                                     new List<string>() {"Hussain", "IT", "Hyderabad"},
                                     new List<string>() {"Sharief", "IT", "Bangalore"},
                                     new List<string>() {"Shaik", "IT", "Chennai"}
                                  };
    

    linq 查询

    var v = from li in list select new {Name = li[0], City=li[2]};
    gv1.DataSource = v;
    gv1.DataBind();
    

    还有网格视图

    <asp:DataGrid runat="server" ID="gv1" AutoGenerateColumns="False>
      <Columns>
        <asp:BoundColumn HeaderText="Name" DataField="Name" />
        <asp:BoundColumn HeaderText="City" DataField="City" />
     </Columns>
    </asp:DataGrid>
    

    但这不是一个好主意。
    按照两位绅士的建议,您应该拥有适当的财产结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-27
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      相关资源
      最近更新 更多