DataGrid和MultiBind

时间:2012-05-02 20:45:42

标签: asp.net

我是ASP.NET的新手,正在努力在GridView中显示数据。我的大部分工作都来自这个论坛的帮助。目前我正在尝试从数据库中构建一个文件名和一个“文件扩展名”,但是卡住了。我想我需要使用MultiBind来实现这个目的吗?我的文件名是ID +“_ tn”+文件扩展名,这是我的代码。

            <asp:GridView ID="HitGridView" runat="server" onrowdatabound="HitsRowBid">
                <Columns>
                <asp:TemplateField HeaderText="Street">
                    <ItemTemplate>
                        <asp:TextBox ID="Adress" runat="server" width="200" Text='<%# Bind("StreetName") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Image">
                    <ItemTemplate>
                        <asp:ImageButton ID="defaultImg" runat="server" ImageUrl='<%# Bind("ImgId") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                </Columns>
            </asp:GridView>

并在代码中

protected void HitsRowBid(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton imgBtn = (ImageButton)e.Row.FindControl("defaultImg");
        imgBtn.ImageUrl = "Content/FileUpload/" + imgBtn.ImageUrl + "_tn" + ".jpg";
    }
}

但是如何获取存储在数据库中的文件扩展名?

1 个答案:

答案 0 :(得分:0)

我主要使用ListViews,但有几种方法可以实现这一点。一种方法是在数据绑定时使用DataKeys并使用onrowdatabound事件中的行索引检索值。另一个选择是在代码隐藏中编写一个辅助方法,并在数据绑定期间调用它,如:

protected string FormatImagePath(string fileName)
{
    string imagePath = Request.ApplicationPath.TrimEnd('/') + "/previews/" + fileName;
    FileInfo testFile = new FileInfo(Helpers.BaseSiteFilePath + @"previews\\" + fileName);
    if (!testFile.Exists)
    {
        imagePath = Request.ApplicationPath.TrimEnd('/') + "/images/no_preview.png";
    }
    return imagePath;
}

这样称呼:

ImageUrl='<%# FormatImagePath(Eval("PreviewURL").ToString()) %>'