将datatable分配给datalist中的datasource

时间:2013-12-11 18:18:04

标签: c# datatable datalist

我试图在路径中获取所有文件.txt并将其列在网页中,如下面的代码所示:

DataTable dt = new DataTable();
dt.Columns.Add("tenalbum", typeof(String));
string dir = Server.MapPath("~") + "images\\avatar\\" + Session["Username"].ToString();
string[] files = Directory.GetFiles(dir);
foreach (string file in files)
{
   if (Path.GetExtension(file).Equals(".txt"))
       {
         DataRow dtr = dt.NewRow();
         dtr["tenalbum"] = Path.GetFileName(file);
       }
}
DataList1.DataSource = dt;
DataList1.DataBind();
<。>在.aspx页面中:

<div>
    <asp:DataList ID="DataList1" runat="server" CellPadding="4" Width="586px" CellSpacing="2"
        GridLines="Both">
        <ItemTemplate>
            <table style="border: thin solid #333333; width: 566px; margin-bottom: 3px">
                <tr>
                    <td style="width: 70px">
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("tenalbum") %>'></asp:Label>
                    </td>
                    <td class="style3">
                        <asp:ImageButton ID="imgbtn_Favorite" runat="server" ImageUrl="~/images/playAlbum.png"
                            Width="25px" CommandArgument='<%# Eval("tenalbum") %>' />
                    </td>
                </tr>
            </table>
        </ItemTemplate>
        <SelectedItemStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    </asp:DataList>
</div>

问题是datalist的数据源没有任何绑定。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

内部循环错过了将行添加到表中所需的行

if (Path.GetExtension(file).Equals(".txt"))
{
    DataRow dtr = dt.NewRow();
    dtr["tenalbum"] = Path.GetFileName(file);
    dt.Rows.Add(dtr);  // This line adds the new row to the rows collection of the table
}

顺便说一下,你只能提取带有txt扩展名using the GetFiles overload且带有模式参数的文件

 string[] files = Directory.GetFiles(dir, "*.txt");

而且,作为最终的优化,我认为你可以简单地写

 List<string> files = Directory.GetFiles(@"d:\temp", "*.txt")
                      .Select(x => Path.GetFileName(x)).ToList();
 DataList1.DataSource = files;
 DataList1.DataBind();