C# 将DataGridViewRow作为引用传递
我想将C# 将DataGridViewRow作为引用传递,c#,for-loop,datagridview,foreach,iteration,C#,For Loop,Datagridview,Foreach,Iteration,我想将DataGridviewRow作为ref传递,在这里我给它的单元格赋值,但我无法这样做 foreach(DataGridViewRow dgr in dgvMarksEntryByClassWise.Rows) { RowValueSet(ref dgr); } 这里给出的是编译时错误,因为dgr是每个迭代变量的foreach 我还尝试使用for loop for (int i = 0; i < dgvMarksEntryByClassWise.Rows.Count; i
DataGridviewRow
作为ref
传递,在这里我给它的单元格赋值,但我无法这样做
foreach(DataGridViewRow dgr in dgvMarksEntryByClassWise.Rows)
{
RowValueSet(ref dgr);
}
这里给出的是编译时错误,因为dgr是每个迭代变量的foreach
我还尝试使用
for loop
for (int i = 0; i < dgvMarksEntryByClassWise.Rows.Count; i++)
{
RowValueSet(ref dgvMarksEntryByClassWise.Rows[i]);
}
这个怎么样
for (int i = 0; i < dgvMarksEntryByClassWise.Rows.Count; i++)
{
var myRow = dgvMarksEntryByClassWise.Rows[i];
RowValueSet(ref myRow);
}
for(int i=0;i
不能使用“foreach”甚至“for”来分配迭代的枚举项。
有一次我用那段代码绕过了它:
List<DataGridViewRow> lstDgr = new List<DataGridViewRow>();
foreach(DataGridViewRow dgr in dgvMarksEntryByClassWise.Rows)
{
DataGridViewRow dgrTemp = dgr;
RowValueSet(ref dgrTemp);
lstDgr.Add(dgrTemp);
}
dgvMarksEntryByClassWise.Rows.Clear();
dgvMarksEntryByClassWise.Rows.AddRange(lstDgr); //Not sure about the AddRange, try the Add method instead
List lstDgr=new List();
foreach(dgvMarksEntryByClassWise.Rows中的DataGridViewRow dgr)
{
DataGridViewRow dgrTemp=dgr;
行值集(参考dgrTemp);
lstDgr.Add(dgrTemp);
}
dgvMarksEntryByClassWise.Rows.Clear();
dgvMarksEntryByClassWise.Rows.AddRange(lstDgr)//无法确定AddRange,请尝试Add方法
希望这有帮助正如上面的评论所述,您不需要通过引用传递
DataGridViewRow
。从参数中删除ref
void RowValueSet(DataGridViewRow dgr)
{
dgr.Cells["StudentZero"].Value = ss.Where(w => w.MarksheetMarks == "0").Count();
if (ss.Count() != 0)
dgr.Cells["StudentISEmpty"].Value = Convert.ToInt16(lblTotlatStudent1.Text) - ss.Count();
else
dgr.Cells["StudentISEmpty"].Value = 0;
dgr.Cells["StudentEntry"].Value = ss.Count();
}
如果网格中的值似乎没有更新,那是因为另一个原因。需要刷新显示时是否重新绑定网格?我同意关于不使用ref传递行的评论。这是一种引用类型。通常仅将该关键字与值类型(如int等)一起使用 我在更改单元格值后DataGridView无法更新时遇到问题,经常需要调用dataGridView1.Invalidate();这取决于事物是如何连接起来的。如果将数据绑定与从INotifyPropertyChanged继承的类一起使用,那么它似乎总是有效的,但是如果您只是更改单元格值,我注意到它在奇怪的时间内不会更新 下面是一个有效的例子。创建一个新的应用程序,在表单上添加一个空的DataGridView,并用以下代码替换代码。这证明您不需要使用ref
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column1" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column2" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column3" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column4" });
for (int i = 0; i <= 4; i++)
{
dataGridView1.Rows.Add();
}
foreach (DataGridViewRow row in dataGridView1.Rows)
{
RowValueSet(row);
}
}
private void RowValueSet(DataGridViewRow row)
{
row.Cells["Column1"].Value = "1";
row.Cells["Column2"].Value = "2";
row.Cells["Column3"].Value = "3";
row.Cells["Column4"].Value = "4";
}
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
添加(新的DataGridViewTextBoxColumn(){Name=“Column1”});
添加(新的DataGridViewTextBoxColumn(){Name=“Column2”});
添加(新的DataGridViewTextBoxColumn(){Name=“Column3”});
添加(新的DataGridViewTextBoxColumn(){Name=“Column4”});
对于(int i=0;对不起@selman 22我传递了它,但当我将值分配给行的单元格时,它没有将值分配给DataGridViewCells。传递了行,但没有将值分配给datagridview cells。那么问题可能出在RowValueSet方法中?你确定它是正确的吗?我确定RowValueSet没有问题。你能显示代码o吗fRowValueSet
?@Damith我已经更新了我的代码,没有理由RowValueSet需要ref传递的行。只要传入,你的代码应该可以正常工作。我不理解@daveshaw只需从你的RowValueSet
方法中删除ref
,看看它是否有效,我看不出任何通过引用传递的理由。DataGridViewRow
已经是一个引用类型。顺便说一句,我不会使用“Ref”,而是传递一个DataGridViewRow对象,作为回报,只需拥有:lstDgr.Add(RowValueSet(dgr));
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column1" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column2" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column3" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Column4" });
for (int i = 0; i <= 4; i++)
{
dataGridView1.Rows.Add();
}
foreach (DataGridViewRow row in dataGridView1.Rows)
{
RowValueSet(row);
}
}
private void RowValueSet(DataGridViewRow row)
{
row.Cells["Column1"].Value = "1";
row.Cells["Column2"].Value = "2";
row.Cells["Column3"].Value = "3";
row.Cells["Column4"].Value = "4";
}
}