2012-02-02 30 views
5

Tôi có một danh sách mà tôi đang ràng buộc với một GridView, do đó GridView của tôi sẽ chỉ có một cột của các giá trị chuỗi này. Tôi muốn có một văn bản tiêu đề thích hợp cho cột này. Làm ơn giúp tôi. Thấy những gì tôi đã cố gắng để làm:Ràng buộc GridView với Danh sách các chuỗi

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

<Columns> 

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

</Columns> 

</asp:GridView> 

Và trong mã đằng sau:

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

: 

: 

// code to populate myList 

: 

: 

GridView1.DataSource = myList; 

GridView1.DataBind(); 

Khi tôi chạy mã này, tôi nhận được hai cột trong GridView. Cột đầu tiên có tiêu đề văn bản là "Danh sách của tôi" và có hàng trống, trong khi cột thứ hai có tiêu đề văn bản là "Mục" và có các hàng có giá trị myList. Tôi muốn chỉ có một cột trong GridView của tôi có tiêu đề văn bản là "Danh sách của tôi" và các hàng có các giá trị của đối tượng myList.

Cảm ơn

+0

có lẽ 'GridView1.DataSource = myList.ToArray();' sẽ làm gì? – Igarioshka

+0

Hi Nishit Thay đổi Tiêu đề Văn bản sau khi ràng buộc Gridview sau đó nó hoạt động kiểm tra mã tôi đăng. – Vinod

Trả lời

-1

phương pháp 1:

làm tự động tạo ra các cột tài sản đúng

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

</asp:GridView> 

phương pháp 2:

làm tự động tạo ra các cột tài sản sai

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

phương thức 2 không hoạt động - có vẻ như bạn không thể thực hiện công việc 'BoundField' mà không có giá trị" DataField "hợp lệ. – pseudocoder

1

Thêm AutoGenerateColumns="false" để vô hiệu hóa cột thứ hai; Tôi không chắc chắn làm thế nào bạn sẽ ràng buộc một mảng chuỗi; vì nó xuất ra Item, có thể thêm DataField="Item" vào định nghĩa lưới của bạn. Hoặc, liên kết với một đối tượng ẩn danh:

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

Và sau đó trong cột bị ràng buộc, hãy chỉ định Dữ liệu làm trường văn bản.

Tùy chọn 3 là rời khỏi AutoGenerateColumns="true" (mặc định) và xóa cột của bạn.

+0

FYI, 'Datafield =" Item "' không hoạt động. Tôi đã kết thúc bằng cách sử dụng phép chiếu linq hoạt động rất tốt. Không thể tự động tạo cột vì tôi muốn áp dụng ItemStyle trong định nghĩa Cột của tôi. – pseudocoder

3

Hoặc bạn có thể làm điều đó như thế này:

ASPX:

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

Code:

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

Bạn có thể làm điều này lập trình trong trường hợp 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"; 
      } 
     } 

Và kiểm soát GridView của bạn sẽ như thế nào

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

Hãy thử điều này:

<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

Set Grid AutoGenerateColumns="false"

0

chỉ sử dụng Vùng chứa.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

Tôi tin rằng sau đây sẽ cung cấp cho bạn những kết quả mà bạn đang tìm kiếm:

 <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> 
Các vấn đề liên quan