【问题标题】:How to display different objects in gridview?如何在gridview中显示不同的对象?
【发布时间】:2014-05-20 14:44:45
【问题描述】:

我的数据库中的一个表存储了图片、文档、dll 吊索等。如何为用户实现所有这些的映射? 我将这些数据绑定到一个数据表,并希望在每个单元格中都有超链接,当单击这些超链接时,会从数据库中调用/打开相应的项目。

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();

在 DB 中的下一个属性:i_id(number)、i_objecttype_id(number)、s_code(nvarchar)、s_name(nvarchar)、m_content(blob)、m_description(nvarchar)

在客户端我看到下一个:i_id(number)、i_objecttype_id(number)、s_code(nvarchar)、s_name(nvarchar)、m_description(nvarchar)。 没有属性 m_content。

【问题讨论】:

  • 请简要说明您的情况,以便每个人都能理解您的问题。如果可能的话,然后用简单的例子来解释。您提供的信息越多,您获得的解决方案就越好。
  • 请举例说明..
  • 如何使用接口和绑定源?
  • 你试过这样的事情吗? labelname.Text = "文本";
  • 您的命令文本看起来很适合 SQL 注入选择。您可能应该将该查询参数化。

标签: c# asp.net oracle gridview


【解决方案1】:

您的问题似乎“不完整”。因此,如果 blob 是图片,您希望显示该图片吗?如果 blob 是 dll 会发生什么?

在您的数据库中,M_CONTENT 字段是一个 blob,因此如果您将其数据绑定到 GridView,则 GridView 无法知道该字段中的内容。

如果您希望显示图像以显示 blob 中文件的类型,那么您需要知道类型。要么将类型存储在数据库中(最佳),要么在运行时解析 blob 并找出文件类型。

在我看来,您已经拥有类型 (I_OBJECTTYPE_ID)。如果是这种情况,那么您可以在 asp:GridView/Columns 下定义一个列

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

在您的情况下,类型列称为 I_OBJECTTYPE_ID。 GetImageUrl 是代码隐藏中的一个函数:

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

使用这种技术,您可以在 ItemTemplate 标记下制作超链接和其他内容。

【讨论】:

    【解决方案2】:

    您可以在 GridView 的 RowDataBound 事件中获取这些值并创建链接/超链接并将它们分配给行

        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();
                }
            }
        }
    

    在您的情况下,将该 Label 更改为 HyperLink 控件并将其 URL 设置为列值

    【讨论】:

    • 我的意思是显示不同的对象。不是链接。
    • 不同的对象是什么意思?
    • 是的,您在原始问题中说您希望在每个单元格中都有超链接。
    【解决方案3】:

    如果您想让用户下载文件而不是显示(因为 dll 可以在浏览器上显示),请执行以下操作:

    1. 创建一个新页面说downloadfile.aspx;
    2. datarowbound事件中解析下载文件所需的值 如文件类型、文件名等;假设您已将 abc.pdf 保存为 blob,则超链接 url 应为 downloadfile.aspx?fname=abc.pdf&amp;type=application&amp;pkey=uniqueidentification
    3. downloadfile.aspx 加载事件中,根据uniqueidentification(即主键)获取byte[] 的blob。将其转换为流,然后像在this question 中一样给予响应。

    【讨论】:

      【解决方案4】:

      要完成此操作,您必须使用 TemplateField。您将向每个单元格插入控件并使用 Eval 函数绑定数据。更多信息请参考link

      【讨论】:

        【解决方案5】:

        为每一行制作网格按钮并使用选择或删除或更新按钮。

        e.selectedindex.

        你可以随时更改标题或隐藏标题。

        你也可以使用像 selectedindexchanged 这样的事件,所以一旦你选择了你就可以得到选择的索引 id,这样就可以调用方法

        【讨论】:

          【解决方案6】:

          这样做,在 TemplateField 中有 EditTemplateFieldItemTemplateField,在 ItemTemplateField 中输入列名 Ex: Age: 并在 Text Bind("Age") 并在 ItemTemplate 中从 EditTemplate 复制所有内容并将其粘贴,不要完全复制我的代码,这是示例,我已将我的代码显示在表格中。所以现在您可以编辑 HTML 之类的所有内容,只需将链接作为 href 就可以了。

          <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>
          

          【讨论】:

            猜你喜欢
            • 2019-11-21
            • 2012-05-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-09
            • 1970-01-01
            • 1970-01-01
            • 2020-10-07
            相关资源
            最近更新 更多