我正在尝试用两个自定义列和一些从数据表中填充的行来填充无界的 datagridview。第一个 datagridview 的列必须从第一个数据表列填充,依此类推。第一列是品牌名称,第二列是品牌图片。
我使用这段代码和一些 linq 来准备两个数组
DataTable dt = new DataTable();
dt = clsTransmit.FillDataTable("SELECT brandName, brandPic FROM brands", false);
int count = dt.Rows.Count;
string[] names = dt.AsEnumerable().Select(row => row.Field<string>("brandName")).ToArray();
string[] pics = dt.AsEnumerable().Select(row => row.Field<string>("brandPic")).ToArray();
现在我想填写我已经尝试过这些代码的datagridview:
DataGridViewColumn brandName = new DataGridViewColumn();
DataGridViewImageColumn imageCol = new DataGridViewImageColumn();
dgv.Columns.Add(brandName);
dgv.Columns.Add(imageCol);
dgv.Columns[0].HeaderText = "Brand Name";
dgv.Columns[1].HeaderText = "Brand Picture";
DataGridViewRow n = new DataGridViewRow();
DataGridViewRow p = new DataGridViewRow();
for (int i = 0; i < count-1; i++)
{
n.Cells[i].Value = names[i];
p.Cells[i].Value = imgList.Images[i];
}
dgv.Rows.AddRange(n);
dgv.Rows.AddRange(p);
我也试试这个:
dgv.Rows.Add(names);
dgv.Rows.Add(pics);
运行后显示错误消息:
指数超出范围。
好的,更新我的代码并得到答案我使用图像列表并通过以下方式填充它:
foreach (var item in pics)
{
Image img = Image.FromFile(item);
imgList.Images.Add(img);
}
并使用这些代码填充gridview并得到正确答案:
dgv.Columns.Add("brandName", "Brand Name");
for (int i = 0; i < count; i++)
{
dgv.Rows.Add(new object[] {names[i]});
}
DataGridViewImageColumn imageCol = new DataGridViewImageColumn();
dgv.Columns.Add(imageCol);
dgv.Columns[1].HeaderText = "Brand Logo";
dgv.Rows.Add();
for (int i = 0; i < count; i++)
{
dgv.Rows[i].Cells[1].Value = imgList.Images[i];
}
但我现在有另一个问题,问题是 datagridview 在所有行的底部都有额外的空行。我已经取消选中启用添加、编辑、删除 datagridview 但它仍然有一个额外的行:(