如何在gridview中显示不同的对象?

时间:2012-11-06 04:11:27

标签: c# asp.net oracle gridview

我数据库中的表格存储了图片,文档,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(数字),i_objecttype_id(数字),s_code(nvarchar),s_name(nvarchar),m_content(blob),m_description(nvarchar) dbview

在客户端上,我看到下一个:i_id(数字),i_objecttype_id(数字),s_code(nvarchar),s_name(nvarchar),m_description(nvarchar)。 没有属性m_content。 clienview

6 个答案:

答案 0 :(得分:1)

看来你的问题“不完整”。那么如果blob是你希望图片显示的图片?如果blob是dll会发生什么?

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

如果要显示图像以显示blob中文件的类型,则需要知道类型。您可以将类型存储在数据库中(Optimal),也可以在运行时解析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>

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

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

使用此技术,您可以在ItemTemplate标记下创建超链接和其他内容。

答案 1 :(得分:0)

您可以在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设置为列值

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

将网格按钮设置为每一行,然后使用选择或删除或更新按钮。

e.selectedindex。

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

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

答案 5 :(得分:0)

这样做,在 TemplateField 中你有 EditTemplateField ItemTemplateField ,在ItemTemplateField中放置你的列名Ex:Age:并在文本中绑定(“Age”)和在ItemTemplate中复制Everythinh从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>