2012-11-06 30 views
6

Một bảng trong cơ sở dữ liệu của tôi đã lưu trữ hình ảnh, tài liệu, dll halyards và vv. Làm cách nào để triển khai ánh xạ tất cả điều này cho người dùng? Tôi liên kết những dữ liệu này với một bảng dữ liệu và muốn có siêu liên kết trong mỗi ô, khi được nhấp, hãy gọi/mở mục tương ứng từ cơ sở dữ liệu.Làm thế nào để hiển thị các đối tượng khác nhau trong GridView?

OracleCommand oracleCom = new OracleCommand(); 
oracleCom.Connection = oraConnect; 
oracleCom.CommandText = "Select * From " + Session["tableNameIns"]; 
OracleDataAdapter adapter = new Oraenter code herecleDataAdapter(); 
DataTable tableD = new DataTable(); 
tableD.Locale = System.Globalization.CultureInfo.InvariantCulture; 
adapter.SelectCommand = oracleCom; 
adapter.Fill(tableD); 
changeTableAtributs(tableD); 
tableResults.DataSource = tableD.AsDataView(); 
tableResults.DataBind(); 

Trong DB atributes tiếp theo: i_id (number), i_objecttype_id (number), s_code (nvarchar), s_name (nvarchar), m_content (blob), m_description (nvarchar) dbview

On client tôi xem tiếp theo: i_id (số), i_objecttype_id (số), s_code (nvarchar), s_name (nvarchar), m_description (nvarchar). Không có thuộc tính m_content. clienview

+6

Vui lòng giải thích kịch bản của bạn để mọi người có thể hiểu câu hỏi của bạn. Và nếu có thể, hãy giải thích bằng ví dụ đơn giản. Bạn càng cung cấp thông tin, Bạn càng nhận được giải pháp tốt hơn. –

+0

Vui lòng giải thích thêm ví dụ .. –

+1

Điều gì về việc sử dụng Giao diện và Nguồn ràng buộc? – Tobias

Trả lời

1

Có vẻ như câu hỏi của bạn là "chưa hoàn thành". Vì vậy, nếu blob là một hình ảnh bạn muốn hình ảnh được hiển thị? Điều gì sẽ xảy ra nếu blob là một dll?

Trong cơ sở dữ liệu của bạn, trường M_CONTENT là một đốm màu, vì vậy nếu bạn databind đó vào một GridView GridView không có cách nào để biết những gì có trong trường đó.

Nếu bạn muốn một hình ảnh được hiển thị để hiển thị loại tệp trong blob thì bạn cần phải biết loại. Hoặc bạn lưu trữ loại trong cơ sở dữ liệu (Tối ưu) hoặc bạn phân tích cú pháp blob khi chạy và tìm ra loại tệp.

Dường như với tôi rằng bạn đã có loại (I_OBJECTTYPE_ID). Nếu trường hợp đó xảy ra thì bạn có thể xác định cột dưới dạng asp: GridView/Columns

<asp:TemplateField HeaderText="File type"> 
    <ItemTemplate> 
     <asp:Image runat="server" ID="mediaImage" 
      ImageUrl='<%# GetImageUrl(Eval("type") as string) %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

Trong trường hợp của bạn, cột loại được gọi là I_OBJECTTYPE_ID. GetImageUrl là một hàm trong codebehind:

switch (type) 
{ 
    case "video": 
     return "~//Images//video.png"; 
    case "audio": 
     return "~//Images//audio.png"; 
} 
return ""; // Something is wrong 

Và sử dụng kỹ thuật này, bạn có thể tạo Siêu kết nối và các nội dung khác trong đánh dấu ItemTemplate.

0

Bạn có thể nhận được những giá trị trong trường hợp RowDataBound của GridView và tạo liên kết của bạn/các siêu liên kết và giao cho các hàng

protected void tableResults_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataRowView row = e.Row.DataItem as DataRowView; 

      if (row != null) 
      { 
       Label lbImagePath = e.Row.FindControl("lbImagePath") as Label; 
       lbImagePath.Text = row["ImagePathColumn"].ToString(); 
      } 
     } 
    } 

Trong trường hợp thay đổi của bạn rằng Nhãn để một điều khiển HyperLink và đặt nó URL tới giá trị cột

+0

Tôi muốn hiển thị các đối tượng khác nhau. Không phải liên kết. –

+0

Bạn có ý nghĩa gì bởi các đối tượng khác nhau? – Sev

+1

Vâng, bạn nói trong câu hỏi ban đầu của bạn rằng bạn muốn có siêu liên kết trong mỗi ô. – lintmouse

0

Nếu bạn muốn cho phép người dùng tải về các tập tin thay vì hiển thị (vì dll có thể được hiển thị trên trình duyệt) thì làm như sau:

  1. tạo ra một trang mới nói downloadfile.aspx;
  2. Trong datarowbound sự kiện phân tích giá trị cần thiết để tải xuống tệp như loại tệp, tên tệp, v.v. giả sử bạn đã lưu abc.pdf làm blob thì url siêu liên kết phải là downloadfile.aspx?fname=abc.pdf&type=application&pkey=uniqueidentification;
  3. Trong downloadfile.aspx sự kiện tải có đốm màu là byte[] dựa trên uniqueidentification (tức là khóa chính). Chuyển đổi nó thành dòng và đưa ra phản hồi như trong this question.
0

Để thực hiện điều này, bạn phải sử dụng TemplateField. Bạn sẽ chèn điều khiển vào mỗi ô và liên kết dữ liệu bằng cách sử dụng chức năng Đánh giá. Để biết thêm thông tin, vui lòng tham khảo link

0

làm nút lưới thành từng hàng và sử dụng nút chọn hoặc xóa hoặc cập nhật.

e.selectedindex.

u luôn có thể thay đổi tiêu đề hoặc ẩn tiêu đề.

u cũng có thể sử dụng các sự kiện như SelectedIndexChanged, do đó khi u chọn u có được chỉ số id chọn để sử dụng mà có thể gọi phương thức

0

Làm như thế này, trong TemplateField bạn có EditTemplateFieldItemTemplateField, trong ItemTemplateField đặt tên cột của bạn Ex: Age: và trong Text Bind ("Age") và trong ItemTemplate copy everythinh từ EditTemplate và dán nó, không chính xác sao chép mã của tôi đây là ví dụ, tôi đã làm hiển thị mã của tôi trong một bảng . Vì vậy, bây giờ bạn có thể chỉnh sửa tất cả mọi thứ như HTML chỉ cần đặt các liên kết as href thats it.

<asp:GridView ID="GridViewFemale" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="LinqDataSourceFemale" Width="158px"> 
    <Columns> 
     <asp:ImageField DataImageUrlField="Image" NullImageUrl="images/INA.jpg" ShowHeader="False"></asp:ImageField> 
     <asp:TemplateField> 
      <EditItemTemplate> 
       <table> 
        <tr> 

         <td> 
          <b> Age:</b> <asp:Label ID="Label1" runat="server" Text='<%# Bind("Age") %>'></asp:Label><br /> 
          <b> Name:</b> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label><br /> 
          <b> Education:</b> <asp:Label ID="Label3" runat="server" Text='<%# Bind("Education") %>'></asp:Label><br /> 
          <b> Current Status:</b> <asp:Label ID="Label4" runat="server" Text='<%# Bind("CurrentStatus") %>'></asp:Label><br /> 
          <b> Height:</b> <asp:Label ID="Label5" runat="server" Text='<%# Bind("Height") %>'></asp:Label><br /> 
          <b> Complexion:</b> <asp:Label ID="Label6" runat="server" Text='<%# Bind("Complexion") %>'></asp:Label><br /> 
          <b> Caste:</b> <asp:Label ID="Label7" runat="server" Text='<%# Bind("Caste") %>'></asp:Label><br /> 
          <b> Group:</b> <asp:Label ID="Label8" runat="server" Text='<%# Bind("Group") %>'></asp:Label> 
         </td> 
        </tr> 
       </table> 
      </EditItemTemplate > 
      <ItemTemplate> 
       <table id="GridTable"> 
        <tr> 

         <td> 
          <b> Age:</b> <asp:Label ID="Label1" runat="server" Text='<%# Bind("Age") %>'></asp:Label><br /> 
          <b> Name:</b> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label><br /> 
          <b> Education:</b> <asp:Label ID="Label3" runat="server" Text='<%# Bind("Education") %>'></asp:Label><br /> 
          <b> Current Status:</b> <asp:Label ID="Label4" runat="server" Text='<%# Bind("CurrentStatus") %>'></asp:Label><br /> 
          <b> Height:</b> <asp:Label ID="Label5" runat="server" Text='<%# Bind("Height") %>'></asp:Label><br /> 
          <b> Complexion:</b> <asp:Label ID="Label6" runat="server" Text='<%# Bind("Complexion") %>'></asp:Label><br /> 
          <b> Caste:</b> <asp:Label ID="Label7" runat="server" Text='<%# Bind("Caste") %>'></asp:Label><br /> 
          <b> Group:</b> <asp:Label ID="Label8" runat="server" Text='<%# Bind("Group") %>'></asp:Label> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
Các vấn đề liên quan