将GridView绑定到字符串列表

时间:2012-02-02 12:02:48

标签: asp.net gridview

我有一个List,我绑定到GridView,因此我的GridView只有一列这些字符串值。我希望为此列提供正确的标题文本。请帮我。看看我试图做什么:

<asp:GridView ID="GridView1" runat="server" Width="95%">

<Columns>

<asp:BoundField HeaderText="My List" />

</Columns>

</asp:GridView>

在代码背后:

List<string> myList = new List<string>();

:

:

// code to populate myList

:

:

GridView1.DataSource = myList;

GridView1.DataBind();

当我运行此代码时,我在GridView中得到两列。第一列具有标题文本作为“我的列表”并具有空行,而第二列具有标题文本作为“项目”并且具有具有myList值的行。我希望我的GridView中只有一列具有标题文本作为“我的列表”和具有myList对象值的行。

由于

8 个答案:

答案 0 :(得分:3)

或者你可以这样做:

<强> .aspx的:

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="test" HeaderText="Text" />
    </Columns>
</asp:GridView>

<强>代码:

var ls=new List<string>();
ls.Add("Test");
ls.Add("Test2");
gv.DataSource=ls.Select (l =>new{test=l});

答案 1 :(得分:1)

添加AutoGenerateColumns="false"以禁用第二列;我不确定如何绑定字符串数组;因为它输出Item,所以可以将DataField="Item"添加到网格定义中。或者,绑定到匿名对象:

this.gvw.DataSource = mylist.Select(i => new { Data = i });

然后在绑定列中,将Data指定为文本字段。

选项3是保留AutoGenerateColumns="true"(默认值)并删除您的列。

答案 2 :(得分:1)

我相信以下内容会为您提供所需的结果:

        <asp:gridview id="MyGridView" runat="server" showheaderwhenempty="true" autogeneratecolumns="false" runat="server">
        <Columns>
            <asp:TemplateField HeaderText="My List">
            <ItemTemplate>
                <asp:Label ID="Column1" runat="server" Text=<%# Container.DataItem %>></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
        </asp:gridview>

答案 3 :(得分:0)

您可以在RowDataBound事件中以编程方式执行此操作。

protected void GridView_MyList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
              ((Label)e.Row.Cells[1].Controls[0]).Text = "My List";
            }
        }

您的GridView控件就像

<asp:GridView ID="GridView_MyList" runat="server" 
Width="800px" OnRowDataBound="GridView_MyList_RowDataBound"></asp:GridView>

答案 4 :(得分:0)

试试这个:

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>


 List<string> l = new List<string>();
            l.Add("computer");
            l.Add("laptop");
            l.Add("palmtop");

            GridView1.DataSource = l;
            GridView1.DataBind();
            GridView1.HeaderRow.Cells[0].Text = "My List";

答案 5 :(得分:0)

设置网格AutoGenerateColumns="false"

答案 6 :(得分:0)

只需使用Container.DataItem

.cs

List<string> myList = new List<string>();
GridView1.DataSource = myList ;
GridView1.DataBind();

的.aspx

    <asp:gridview ID="GridView1" runat="server">
        <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="nasdc" runat="server" Text=<%# Container.DataItem %>></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>

http://forums.asp.net/t/1050997.aspx?How+to+bind+a+GridView+to+a+List+string+

答案 7 :(得分:-1)

方法1:

make auto generate columns属性为true

<asp:GridView ID="GridView1" runat="server" Width="95%" autogeneratecolumns = "true">

</asp:GridView>

方法2:

make auto generate columns属性为false

<asp:GridView ID="GridView1" runat="server" Width="95%">
    <Columns>
    <asp:BoundField HeaderText="My List" />
    </Columns>
</asp:GridView>