Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环遍历特定列,然后为按钮指定值_C#_Datagridview - Fatal编程技术网

C# 循环遍历特定列,然后为按钮指定值

C# 循环遍历特定列,然后为按钮指定值,c#,datagridview,C#,Datagridview,我正在做一项学校作业,在作业中,我将数据从CSV文件导入WinForm中的DataGridView。这一切都很完美,但是,现在我想给一个按钮分配一个值(在第5、6和8列中),这些值都可以根据第3列中同一行中的值而变化。如果第3列中的值在同一行中为“输入”,则第5列中的按钮需要为“输入”,第5列之后该行中的其余单元格需要为只读文本框 如果第3列中的值在同一行上为“输出”,则第5列中的按钮需要为“开”,第6列中的按钮需要为“关”,第8列中的按钮需要为“开” 我试过: 循环遍历所有单元格,foreac

我正在做一项学校作业,在作业中,我将数据从
CSV
文件导入
WinForm
中的
DataGridView
。这一切都很完美,但是,现在我想给一个按钮分配一个值(在第5、6和8列中),这些值都可以根据第3列中同一行中的值而变化。如果第3列中的值在同一行中为“输入”,则第5列中的按钮需要为“输入”,第5列之后该行中的其余单元格需要为只读文本框

如果第3列中的值在同一行上为“输出”,则第5列中的按钮需要为“开”,第6列中的按钮需要为“关”,第8列中的按钮需要为“开”

我试过:

循环遍历所有单元格,foreach循环,循环遍历第3列,但我不确定如何更改同一行中按钮的值。(当你点击它们时,它们也需要有一个不同的功能,但我认为当我理解了它的工作原理时,这会更容易)

是需要使用的CSV文件的预览

这是我迄今为止编写的代码(正在运行):

private void btnbestig\u单击(对象发送者,事件参数e)
{
尝试
{
LaadCSVToDataGrid(openFile.FileName);
dataGridView1.Sort(dataGridView1.Columns[3],ListSortDirection.Ascending);
dataGridView1.Columns[0]。Visible=false;
dataGridView1.Columns[1]。只读=true;
dataGridView1.Columns[2]。Visible=false;
dataGridView1.Columns[3]。只读=true;
dataGridView1.Columns[4]。Visible=false;
DataGridViewButtonColumn btnInput=新DataGridViewButtonColumn();
dataGridView1.Columns.Add(btnInput);
btnInput.HeaderText=“Functie”;
btnInput.Text=“输入”;
btnInput.Name=“colInput”;
btnInput.UseColumnTextForButtonValue=true;
DataGridViewButtonColumn btnOff=新DataGridViewButtonColumn();
dataGridView1.Columns.Add(btnOff);
btnOff.HeaderText=“”;
btnOff.Text=“关”;
btnOff.Name=“colInput”;
btnOff.UseColumnTextForButtonValue=true;
DataGridViewTextBoxColumn txtAantalSeconden=新DataGridViewTextBoxColumn();
dataGridView1.Columns.Add(txtaantalsconden);
txtaantalsconden.HeaderText=“”;
txtaantalsconden.Name=“txtAantalSec”;
txtaatalseconden.ReadOnly=false;
DataGridViewButtonColumn btnOnSec=新DataGridViewButtonColumn();
dataGridView1.Columns.Add(btnOnSec);
btnOnSec.HeaderText=“”;
btnOnSec.Text=“Aantal seconden”;
btnOnSec.Name=“colInput”;
btnOnSec.UseColumnTextForButtonValue=true;
btnOntgrendel.Enabled=true;
comboBoxProfiel.Enabled=false;
btnbeesting.Enabled=false;
btnKiesProfiel.Enabled=false;
btnniewprofiel.Enabled=false;
}
捕获(异常错误)
{
MessageBox.Show(
错误消息,
“福特”,
MessageBoxButtons.OK,
MessageBox图标。警告
);
}
}
私有void dataGridView1\u CellValueChanged(对象发送方,DataGridViewCellEventArgs e)
{
Console.WriteLine(如ColumnIndex);
Console.WriteLine(e.RowIndex);
如果(e.ColumnIndex==3&&e.RowIndex>=0)
{
如果(dataGridView1[e.ColumnIndex,e.RowIndex].ToString()=“输入”)
{
dataGridView1[5,e.RowIndex].Value=“输入”;
Console.WriteLine(如ColumnIndex);
Console.WriteLine(e.RowIndex);
}
}
}

由于附加列是在填充数据后添加的,因此需要循环并根据输入单元格的值设置目标单元格的值

private void UpdateCells()
{
foreach(dataGridView1.Rows.OfType()中的var r)
.其中(x=>!x.IsNewRow))
{
var v=r.Cells[3]。值?.ToString();
如果(v==“输入”)
{
r、 单元格[5]。Value=“输入”;
//其他变化。。。
}
其他的
{
r、 单元格[5]。Value=“On”;
//其他变化。。。
}    
}
}
设置网格后调用此方法:

private void btnbestig\u单击(对象发送者,事件参数e)
{
尝试
{
LaadCSVToDataGrid(openFile.FileName);
dataGridView1.Sort(dataGridView1.Columns[3],ListSortDirection.Ascending);
dataGridView1.Columns[0]。Visible=false;
btnInput.UseColumnTextForButtonValue=false;
// ...
UpdateCells()
}
捕获{…}
}
如果只读第三列的值在运行时被代码更改,则处理
CellValueChanged
事件以更新目标单元格:

private void dataGridView1\u CellValueChanged(对象发送方,DataGridViewCellEventArgs e)
{
如果(e.ColumnIndex==3&&e.RowIndex>=0&&!dataGridView1.Rows[e.RowIndex].IsNewRow)
{
var v=dataGridView1[e.ColumnIndex,e.RowIndex].Value?.ToString();
如果(v==“输入”)
{
dataGridView1[5,e.RowIndex].Value=“输入”;
//其他变化。。。
}
其他的
{
dataGridView1[5,e.RowIndex].Value=“On”;
//其他变化。。。
}
}
}

处理事件,检查
e.ColumnIndex==3&&e.RowIndex>=0
,获取当前单元格值,如
if(dgv[e.ColumnIndex,e.RowIndex].ToString()==“something”)
,并相应地设置同一行的单元格(5、6和8)值/属性。我不太确定“设置单元格(5、6和8)”是什么意思values=同一行的相应属性“我的意思是第5、6和8列会相应地更改。我没有说
values=properties
!我说,获取相关单元格的当前值,并根据该值执行任何操作。
dgv[5,e.RowIndex]。