C#在嵌套的GridView上显示asp.net中的文件图标
问题描述:
根据asp.net GridView中的文件扩展名,我无法显示文件图标。C#在嵌套的GridView上显示asp.net中的文件图标
的GridView的结构nested
我没有错误,但GridView控件用于显示图标栏是空的。
我下面的代码。
你能帮我吗?
预先感谢您的任何帮助,真的很感激。
的.cs
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string root = @FilePath;
string folder = GridView2.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvOrders = (GridView)e.Row.FindControl("gvOrders");
DirectoryInfo directory = new DirectoryInfo(root + "/" + folder);
FileInfo[] fileInfo = directory.GetFiles("*.*",
`SearchOption.AllDirectories);
foreach (GridViewRow gvr in gvOrders.Rows)
{
LinkButton lnkDownload = (LinkButton)gvr.FindControl("LinkButton");
Image ib = (Image)gvr.FindControl("ib1");
string path = lnkDownload.Text;
string exten = path.Substring(path.LastIndexOf("."));
if (exten == ".pdf")
ib.ImageUrl = "images/pdf.GIF";
}
gvOrders.DataSource = fileInfo;
gvOrders.DataBind();
}
}
的.aspx
<asp:TemplateField>
<ItemTemplate>
<img alt="" style="cursor: pointer" src="images/plus.png" />
<asp:Panel ID="pnlOrders" runat="server" Style="display: none">
<asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false"
CssClass="mGrid" Width="700" HorizontalAlign="Center">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Image runat="server" ID="ib1" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Download"
ItemStyle-HorizontalAlign="Justify">
<ItemTemplate>
<asp:LinkButton ID="lnkDownload"
Text='<%# Eval("Name") %>'
CommandArgument='<%# Eval("FullName") %>'
runat="server"
OnClick="lnkDownload_Click"
OnClientClick="if (!confirm('Sure ?')) return false;">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
#Edit01
如果尝试使用:
<asp:Image runat="server" ID="ib1" ImageUrl="images/pdf.gif" />
答
请试试这个:
<asp:TemplateField>
<ItemTemplate>
<asp:Image runat="server" ID="ImgIco"
ImageUrl='<%# string.Format("/images/{0}.png",
Eval("Name").ToString().Split(Convert.ToChar("."))
[Eval("Name").ToString().Split(Convert.ToChar(".")).Count() - 1].ToString()) %>' />
</ItemTemplate>
</asp:TemplateField>
答
以猜测,exten == ".pdf"
是不正确的。
也许
if(lnkDownload.Text.EndsWith("pdf") == true) { ib.ImageUrl = "images/pdf.GIF"; }
会更好。这消除了所有的子串业务。
+0
感谢您的回复,但显示图标的gridview列继续为空 –
答
这段代码会有帮助。没有嵌套循环的GridView。请注意,文件名是小写的,以便在文件名中包含.PDF
或.pdf
。
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
//check if the row is a datarow
if (e.Row.RowType == DataControlRowType.DataRow)
{
//cast the row back to a datarowview
DataRowView row = e.Row.DataItem as DataRowView;
//get the extension from the file name
string extension = Path.GetExtension(row["Name"].ToString().ToLower());
//show the correct icon
if (extension == ".pdf")
{
ib.ImageUrl = "/images/pdf.GIF";
}
else
{
ib.ImageUrl = "/images/unknown.GIF";
}
}
}
如果你只是显示网格外的图片,它出现在哪里?我怀疑这个网址没有解决。 – Marisa
@Marisa感谢您的回复,请参阅我的第一个问题中的**#Edit01 ** - –
您是否确定OnRowDataBound将被解雇? –