2009-12-04 10 views
17

Tôi muốn xuất một danh sách các tiêu đề tin tức có thể nhấp được. Cho đến nay tôi có thể làm cho nó in ra một danh sách các tiêu đề vì tôi kéo và thả bảng NewsHeadline trong thiết kế xem trong VS 2010. Làm thế nào để bạn nghĩ rằng tôi nên làm cho các yếu tố danh sách có thể click? Tôi đã tìm một thuộc tính URL nhưng tôi không thấy nó. Tôi có cần bọc < a href không?Thêm cột liên kết vào ASP.NET GridView

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" 
     EmptyDataText="There are no data records to display."> 
     <Columns> 
      <asp:BoundField DataField="NewsHeadline" HeaderText="NewsHeadline" 
       SortExpression="NewsHeadline" /> 
     </Columns> 
    </asp:GridView> 

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString1.ProviderName %>" 
     SelectCommand="SELECT [NewsHeadline] FROM [NewsTable]"></asp:SqlDataSource> 
    </form> 

Trả lời

28

Bạn cần thay đổi loại cột từ cột BoundColumn thành cột siêu kết nối.

<asp:hyperlinkfield headertext="NewsHeadline" 
     datatextfield="NewsHeadline" 
     datanavigateurlfield="NewsURL" 
     datanavigateurlformatstring="http://{0}" /> 

Ngoài việc thực hiện thay đổi này, bạn sẽ cần phải đảm bảo rằng bạn đang chọn URL hoặc thứ gì đó bạn có thể sử dụng để tạo liên kết đến bài viết tin tức. Trong ví dụ trên, tôi giả sử URL là thứ bạn có thể lấy từ nguồn SQL của mình. Nếu đó là ID, chỉ cần nhập phần còn lại của url như thế này ... "~/MyNewsPage.aspx? NewsID = {0}" ...

+2

Tôi đã phải sử dụng DataNavigateUrlFields là một điều .NET 4? –

3

Bạn cần sử dụng trường siêu liên kết thay vì một BoundField , như vậy:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" 
    EmptyDataText="There are no data records to display."> 
    <Columns> 
     <asp:HyperLinkField HeaderText="NewsHeadline" SortExpression="NewsHeadline" DataTextField="NewsHeadline" NavigateUrl="..." /> 
    </Columns> 

9

Sử dụng hyperlinkfield thay vì:

<asp:hyperlinkfield datatextfield="NewsHeadline" 
     datanavigateurlfields="NewsID" 
     datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" /> 
+0

Giải pháp gọn gàng .. – dincerm

2

Các HyperLinkField sẽ làm việc tốt như những người khác đã chỉ ra. Tuy nhiên, trong trường hợp bạn muốn toàn bộ hàng có thể nhấp, bạn có thể sử dụng điều khiển máy chủ tùy chỉnh thực hiện GridView được đề xuất trong bài đăng SO "Making an entire row clickable in a gridview".

Xem câu hỏi tôi đã đăng trên how to implement a C# custom server control khi triển khai.

Chỉ một tùy chọn khác.

3

Something như thế này sẽ làm việc tuyệt vời như một giải pháp trong Visual Studio 2010.

  1. Tạo một GridView trong tab thiết kế trang web của bạn trong VS.
  2. Di chuột qua GridView và nhấp vào mũi tên xuất hiện ở trên cùng bên phải.
  3. Chuyển đến "Chọn nguồn dữ liệu" và chọn "nguồn dữ liệu mới ..."
  4. Tạo chuỗi kết nối vào cơ sở dữ liệu của bạn và chọn bảng NewsHeadline.
  5. Viết truy vấn SELECT News_Id, NewsHeadline FROM NewsHeadline
  6. Hoàn tất thiết lập. Bây giờ, một số mã sẽ được tạo trong tab Nguồn. Điều này cũng sẽ tạo một số SqlDataSource hiện là số DataSource trong số GridView của bạn.
  7. Chuyển đến nơi mã dành cho số GridView của bạn trong tab Nguồn và thay thế bằng mã sau.

Code:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="Id" DataSourceID="SqlDataSource1"> 
    <Columns> 
    <asp:HyperLinkField 
      DataNavigateUrlFields="News_Id" 
      DataNavigateUrlFormatString="~\newsdetails.aspx?News_Id={0}" 
      DataTextField="NewsHeadline" 
      HeaderText="News HeadLines" 
      SortExpression="NewsHeadline" /> 
    </Columns> 
</asp:GridView> 

Và bạn đã cài đặt xong.Điều này sẽ tạo danh sách tất cả các tiêu đề dưới dạng siêu liên kết với liên kết độc đáo được tạo động tới các lời khen trang newsdetails.aspx của chuỗi truy vấn mà chúng tôi đã tạo bằng cách sử dụng PRIMARY KEYNews_Id tương ứng với mỗi mục nhập NewsHeadline trong bảng NewsHeadline.

Sau đó, khi bạn tải trang newsdetails.aspx bạn sử dụng: Request.QueryString["News_Id"] để nhận giá trị News_Id từ URL và sử dụng nó để truy vấn cơ sở dữ liệu để biết chi tiết về NewsHeadline cụ thể đã được nhấp. Sau đó, bạn có thể hiển thị kết quả của truy vấn đó trên trang web.