问题描述
在 Foreach 中,数据完全循环,但是当数据发送到 while 时,它仅显示每个数据的单个字符,例如:确切数据是:“John”但在我的代码中它显示:J 然后下一个 O,H,N 直到精确数据的每个字符完成。下面的代码示例:
foreach (DataGridViewRow row in DataGrid2.Rows)
{
bool isSelected = Convert.ToBoolean(row.Cells["ChkOkay"].Value);
if (isSelected)
{
value += row.Cells["EnrollName"].Value.ToString();
Console.Writeline("Selected Values " + value);
}
}
while (v < value.Length())
{
do
{
//It display single character only instead whole name.
MessageBox.Show("Name: "value[v] + "Slot: " + u);
foreach (var chari in value[v].ToString())
{
//I re use the data here from 1st foreach
}
v++;
u += 51;
} while (u < 5559);
解决方法
字符串可以像数组一样被索引。将字符串视为数组(并在方括号中添加索引器)返回字符串中该位置的字符。"John"[0]
是 'J'
。您的 value
是单个字符串,而不是字符串数组。
有了这个:
value += row.Cells["EnrollName"].Value.ToString();
您正在使 string value
变得越来越长。如果您的网格有 3 行包含“mark”、“luke”和“john”,则您的 value
最终为 "marklukejohn"
如果你然后循环它,你可以一次将它发送一个字符
我怀疑您想将字符串作为整个字符串(其中 3 个)保留在数组(或列表)中.. 在这种情况下:
var names = new List<string>();
foreach ....
names.Add(row.Cells["EnrollName"].Value.ToString())
然后您可以稍后遍历列表并将名称作为完整字符串提取
while (v < names.Count)
{
MessageBox.Show("Name: " + names[v] + "Slot: " + u);
您的代码充满语法错误,无法编译。除非问题与编译器错误有关
,否则请在发布之前尝试让代码正常工作 ,我不明白你的代码,但正确的形式是将一列 DataGrid 行放在一个列表中。
然后打印列表元素,然后检查每个列表项的字符。
List<string> EnrollNameList = new List<string>();
foreach (DataGridViewRow row in DataGrid2.Rows)
{
bool isSelected = Convert.ToBoolean(row.Cells["ChkOkay"].Value);
if (isSelected)
{
string colValue = row.Cells["EnrollName"].Value.ToString();
EnrollNameList.Add(colValue);
Console.WriteLine("Selected Values " + colValue);
}
}
int v = 0;
while (v < EnrollNameList.Count)
{
//message box show whole EnrollName
MessageBox.Show("Name: " + EnrollNameList[v]);
foreach (var chari in EnrollNameList[v])
{
//get each char in EnrollName
}
v++;
}