我想在下面用图片填充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);
和其他一些尝试,但它们没有用。我很傻。
我会很高兴得到任何帮助。
答案 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);
}