逐个单元格填充gridview

时间:2010-03-08 20:51:47

标签: c# asp.net

我想在下面用图片填充GridView:

<asp:GridView ID="GrdDynamic" runat="server" AutoGenerateColumns="False">
    <Columns>
    </Columns>
</asp:GridView>

下面的代码遍历目录,然后我收集图像标题并希望它们在gridview中填充。粗体代码运行不正常,gridview只填充列表中的最后一个图像。

List<string> imagelist = new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
    foreach (String image in Directory.GetFiles(Server.MapPath("example/")))
    {
        imagelist.Add("~/example/" + Path.GetFileName(image));
    }
    loadDynamicGrid(imagelist);
}

private void loadDynamicGrid(List<string> list)
{
    DataTable dt = new DataTable();

    DataColumn dcol = new DataColumn(NAME, typeof(System.String));
    dt.Columns.Add(dcol);

    dcol = new DataColumn("NAME1", typeof(System.String));
    dt.Columns.Add(dcol);

    dcol = new DataColumn("NAME2", typeof(System.String));
    dt.Columns.Add(dcol);

    dcol = new DataColumn("NAME3", typeof(System.String));
    dt.Columns.Add(dcol);

    DataRow drow = dt.NewRow();
            dt.Rows.Add();
            dt.Rows.Add();

            **for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    foreach (string value in list)
                    {
                        dt.Rows[i][j] = value;
                    }
                }
            }**

    foreach (DataColumn col in dt.Columns)
    {
        ImageField bfield = new ImageField();

        bfield.DataImageUrlField = NAME;

        bfield.HeaderText = col.ColumnName;

        GrdDynamic.Columns.Add(bfield);
    }

    GrdDynamic.DataSource = dt;

    GrdDynamic.DataBind();
}

如何使用可用的图像数量逐个单元格填充gridview?

我知道这很简单,我尝试了各种方法,例如:dt.Rows.Add(list);和其他一些尝试,但它们没有用。我很傻。 我会很高兴得到任何帮助。

1 个答案:

答案 0 :(得分:1)

您使用foreach重复设置每个单元格到每个字符串。您需要在list中添加与特定单元格对应的特定元素。尝试这样的事情:

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    for (int j = 0; j < dt.Columns.Count; j++) 
    { 
        //below line assumes list has more than i*j elements
        //how you want to handle anything outside that case 
        //is not clear
        dt.Rows[i][j] = list[(i * dt.Columns.Count) + j] ;                     
    } 
}

编辑:更仔细地阅读您的问题,您的问题基本上不在该循环之外。即使您应用了上述修复,您仍然无法得到您所希望的。您需要做的是遍历列表,并在列表中添加每行,并将该行添加到表中。像这样:

int currColIndex = 0;
DataRow drow = dt.NewRow();
foreach(string value in list)
{
    if(currColIndex >= dt.Columns.Count) 
    { 
        dt.Rows.Add(drow);
        drow = dt.NewRow(); 
        currColIndex = 0;
    }
    drow[currColIndex++] = value;    
}
if(currColIndex != dt.Columns.Count)
{
    dt.Rows.Add(drow);
}