【发布时间】:2021-03-21 06:57:12
【问题描述】:
我正在使用 linq 查询尝试我的第一个项目。我将新行添加到已经存在的列名的 datagridview 中。
其实是可以的
grid.DataSource = qry.ToList();
但由于列HeaderText 的Unicode 字符的某些原因。因此,我将只将每一行放入具有现有列名的 DataGridView。
我需要用本地语言显示HeaderText。但是,我可以根据需要以多种方式更改HeaderText,但根据经验,我认为在 UI 站点中设计HeaderText 对我来说是最好的方式。
下面是我练习过的一些代码。
var qry = (from c in db.TBLCOMPANY
where (c.STATUSFLAG == 1)
select c).OrderByDescending(c => c.LASTUPDATE);
// grid.DataSource = qry.ToList();
int i = 0;
foreach (MCOMPANY item in qry.ToList())
{
i = +1;
DataGridViewRow dr = new DataGridViewRow();
dr.Cells[0].Value = item.OID.ToString();// Error start from this line
dr.Cells[1].Value = i.ToString();
dr.Cells[2].Value = item.COMPANY.ToString();
dr.Cells[3].Value = item.PROVINCE.ToString();
dr.Cells[4].Value = item.DISTRICT.ToString();
dr.Cells[5].Value = item.VILLAGE.ToString();
dr.Cells[6].Value = item.ESTABLISH.ToString("dd/MM/yyyy");
dr.Cells[7].Value = item.TEL.ToString();
dr.Cells[8].Value = item.MOBILE.ToString();
dr.Cells[9].Value = item.EMAIL.ToString();
dr.Cells[10].Value = item.ACC1.ToString();
dr.Cells[11].Value = item.ACC2.ToString();
dr.Cells[12].Value = item.STATUSFLAG.ToString();
dr.Cells[13].Value = item.UPDATEBY.ToString();
dr.Cells[14].Value = item.LASTUPDATE.ToString();
grid.Rows.Add(dr);
}
这是错误信息
索引超出范围。必须为非负数且小于集合的大小。
参数名称:索引
错误信息的详细信息在这里
System.ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。
参数名称:索引
在 System.Collections.ArrayList.get_Item(Int32 索引)
在 System.Windows.Forms.DataGridViewCellCollection.get_Item(Int32 索引)
实际上,我仔细检查了 UI 网格中的存在列名是 15,而在编码中我被声明为从 0 到 14。我不知道。
请问,谁能建议如何做到这一点?这是我的第一个 Linq 项目。
提前谢谢你
【问题讨论】:
-
在您将 DataGridRow 添加到 DataGrid 之前,它与它没有任何关系,因此不知道您有 15 列。另见stackoverflow.com/questions/47497211/…
-
另外:你的意思可能不是
i = +1;,而是i += 1; -
谢谢先生,我已经修复了您推荐的错误,但仍然抛出同样的错误。
-
i += 1; DataGridViewRow dr = (DataGridViewRow)grid.Rows[0].Clone();
-
请edit您的问题包含新信息,因为在 cmets 中写入时很容易错过。