2012-02-02 69 views
5

我有一個列表,我綁定到一個GridView,因此我的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得到兩列。第一列的標題文本爲「我的列表」並具有空白行,而第二列的標題文本爲「Item」並且行具有myList值。我想在我的GridView中只有一列將標題文本作爲「我的列表」以及具有myList對象值的行。

感謝

+0

也許'GridView1.DataSource = myList.ToArray();'會做什麼? – Igarioshka 2012-02-02 12:10:42

+0

嗨Nishit綁定Gridview後更改標題文本,然後它工作檢查我張貼的代碼。 – Vinod 2012-02-03 11:55:40

回答

-1

方法1:

使自動生成列屬性真正

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

</asp:GridView> 

方法2:

使自動生成列屬性假

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

方法2不起作用 - 看起來您無法在沒有有效的「DataField」值的情況下使「BoundField」工作。 – pseudocoder 2017-02-20 17:56:00

1

添加AutoGenerateColumns="false"以禁用第二列;我不知道你將如何綁定一個字符串數組;因爲它輸出項目,可能會將DataField="Item"添加到您的網格定義中。或者,綁定到匿名對象:

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

然後在您的綁定列中,將數據指定爲文本字段。

選項3將離開AutoGenerateColumns="true"(默認值)並刪除您的列。

+0

僅供參考,'Datafield =「Item」'不起作用。我最終使用了非常棒的linq投影。無法自動生成列,因爲我想在我的列定義中應用ItemStyle。 – pseudocoder 2017-02-20 17:57:35

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}); 
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> 
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"; 
0

定格AutoGenerateColumns="false"

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+

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>